スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    Excelの列名を列番号から取得する関数

    前回ちょこっと記述しましたが,表計算ソフトのワークシート列名を列番号から作成する関数を作ってみました.

    かかりはじめの時はなかなかきれいにまとまらないのでもやもやしていましたが,再帰を使って記述するとすっきりして,そこからループに展開した非再帰版も作ってみました.

    できあがってみるとなかなかきれいな処理です.再帰処理版と言っても,Integerの最大値2の32乗を渡しても6回までしか再帰呼び出しは発生しない(列名が7桁の文字列になる場合)ので,たいしたコストはかかりません.

    以下,VisualStudio2010で組んだVB.NETのソースですが,他の言語への移植も容易です.

    ' アルファベット文字数(number of alphabet characters
    Private Const NoAC As Integer = 26

    ''' <summary>
    ''' 表計算ワークシート列名作成
    ''' </summary>
    ''' <param name="column">1以上の列番号</param>
    ''' <returns>列名</returns>
    ''' <remarks></remarks>
    Public Function ColumnName(column As Integer) As String
        Dim name As String = String.Empty
        Dim v = column
        Do
            name = Chr(Asc("A"c) + (v - 1) Mod NoAC) & name
            If v <= NoAC Then
                Exit Do
            Else
                v = CInt(Math.Ceiling((v - NoAC) / NoAC))
            End If
        Loop
        Return name
    End Function

    ''' <summary>
    ''' 表計算ワークシート列名作成(再帰処理版)
    ''' </summary>
    ''' <param name="column">1以上の列番号</param>
    ''' <returns>列名</returns>
    ''' <remarks></remarks>
    Public Function ColumnNameR(column As Integer) As String
        Dim name As String = Chr(Asc("A"c) + (column - 1) Mod NoAC)
        If column <= NoAC Then
            Return name
        Else
            Return ColumnNameR(CInt(Math.Ceiling((column - NoAC) / NoAC))) & name
        End If
    End Function


    収束の早い再帰処理を組めるとなんかうれしくなっちゃいますね.

    スポンサーサイト

    テーマ : ソフトウェア開発
    ジャンル : コンピュータ

    tag : Excel franework .net プログラム

    コメントの投稿

    非公開コメント

    プロフィール

    eikun

    Author:eikun
    なかなかやるきがでない人です

    えいくんち

    twitter

    pixiv

    最新記事
    最新コメント
    最新トラックバック
    月別アーカイブ
    カテゴリ
    検索フォーム
    RSSリンクの表示
    リンク
    ブロとも申請フォーム

    この人とブロともになる

    QRコード
    QR
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。