python

しょっちゅう忘れることを書いておく。

66

155 views

エクセルのセル名から行と列の番号を抜く方法

# coding: UTF-8

def get_row(cell):
    """
    エクセルのセル名を受け取り、行番号だけ抽出する
    :param cell: A5,B6などのセル番号
    :return: A、Bなどの列番号
    """
    row = int(''.join(filter(str.isdigit, cell)))  # 行番号を抽出
    return row


def get_col(cell):
    """
    エクセルのセル名を受け取り、列番号だけ抽出する
    :param cel: A5,B6などのセル番号
    :return: 5,6などの列番号
    """
    col = ''.join(filter(str.isalpha, cell))  # 列文字を抽出
    return col


def next_excel_column(col_str):
    """
    エクセルの列番号(文字列)を次の列番号に変換する関数。

    'A', 'B', ..., 'Z', 'AA', 'AB', ..., 'AZ', 'BA', ..., 'ZZ', 'AAA' といった形式のエクセルの列番号を
    入力として受け取り、その次の列番号を計算し返します。

    Parameters:
    col_str (str): エクセルの列番号(例: 'A', 'B', ..., 'Z', 'AA', ..., 'AZ')

    Returns:
    str: 次のエクセルの列番号に対応する文字列。

    Examples:
    >>> next_excel_column('A')
    'B'
    >>> next_excel_column('Z')
    'AA'
    >>> next_excel_column('AZ')
    'BA'
    >>> next_excel_column('ZZ')
    'AAA'
    """

    # 列名(例: "A", "B", ..., "Z", "AA")を数値に変換する処理
    def column_to_number(col_str):
        col_num = 0
        for char in col_str:
            col_num = col_num * 26 + (ord(char.upper()) - ord('A') + 1)
        return col_num

    # 数値をエクセル列名(例: 1 -> "A", 27 -> "AA")に変換する処理
    def number_to_column(col_num):
        result = []
        while col_num > 0:
            col_num -= 1  # 1ベースから0ベースに調整
            result.append(chr(col_num % 26 + ord('A')))
            col_num //= 26
        return ''.join(result[::-1])

    # 列名を数値に変換して、1を加えて次の列番号に
    next_col_num = column_to_number(col_str) + 1

    # 数値を再び列名に変換して返す
    return number_to_column(next_col_num)


if __name__ == '__main__':
    cel ="B5"
    ret = filter(str.isdigit, cell)
    for d in ret:
        print(d)

    row = get_row(cell)
    col = get_col(cell)

    print(f"{row},{col}")

    next_col = next_excel_column('Z')
    print(next_col)

Page 59 of 69.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626