• ベストアンサー

VBA Target.ColumnをRangeへ

Excel VBAについてお尋ねいたします。 Excel VBAにて現在選択しているセルの列番号をTarget.Columnで取得することが出来ますが、Target.Columnで取得した列番号(数字)をRange方式のアルファベットに変換する方法はございますでしょうか? Range形式のアルファベットに変換してから、セルに=○○という数式を出力させたいです。 選択する列は、N列~右端までの間です。 取得した列番号を26で割って26で割って26で割って…を繰り返して、商と余でアルファベットを形成するという方法を考えましたが、その場合でもどうやって記述すればいいですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

計算すると復雑になる。 システムの力を借りるべき。 本来、この関数があってほしいが。列番号ーー>列記号の変換関数。その逆も。 (B列のBは、列記号とは言わず、列番号というようだが) 下記が、今までの小生の考察では、一番良い。 標準モジュールに Sub test01() '--BT5の例 例えば111を入れておく n = 72 ' Target.Columnで得た数値。 第72列目はBT列ですが、 r = 5 '--- x = Cells(1, n).Address MsgBox x c = Split(x, "$") MsgBox c(1) '0でなく、1です MsgBox Range(c(1) & r) End Sub 判ったら、Msgbox行は省き、Target.Columnとつなげてください。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率65% (1624/2466)
回答No.1

Replace$(Target.Cells(1).Address(0, 0), Target.Cells(1).Row, "") という手法があるようです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA Columnプロパティで・・・

    エクセル2002使用です。 FindメソッドでRangeオブジェクトを取得し、Columnプロパティでそのオブジェクトの列番号をを取得し、Columnsプロパティーでその列番号が最後になる複数行を取得して、その取得した範囲の空白セルを削除しようとしています。 Dim findcell as Range Dim cl as String Set findcell = Rows(1).Find(What:="賞") cl = findcell.Column Columns(3:cl).SpecialCell(xlCellTypeBlanks).Delete Columns(3:cl)でエラーとなってしまいます。 Columnsプロパティーで複数行を取得するときは、アルファベットの列番号を指定しなければならないと思うのですが、Columnプロパティーでは、数字で列番号を取得してしまうため困っています。 Columnプロパティーでアルファベットを取得する方法 または Columnsプロパティーで複数行を数字の列番号で取得する方法で何か良い方法はありますでしょうか? よろしくお願いします。

  • Excel VBA セルの値を変更後にVBA作動

    Excel VBAを活用して、特定のセルの値が変更されたときに、VBA処理を発動させることになりました。 処理といたしましては、C列(3列目)の4行目以下の空白セルに数値を入力するか、セルに入力されている数値を変更した場合にVBAを発動させたいです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 And Target.Row >= 4 Then MsgBox "セルの値が更新されました" End If End Sub 上記のコードを実行してみたところ、3列目(C列)の4行目を選択した段階でVBAが作動してしまいます。 セルの値変更後に作動するようにするには、どう修正すればよろしいでしょうか?

  • Excel VBA Rangeについて

    下記のコードは、あるテキストに掲載されていたコードです。 D5に番号を入力すると、F5に文字が表示されるというようなコードです。 下記コードのRange("顧客コード")とは何を意味するのでしょうか? Worksheets("顧客")の意味は分かりますが、私の知識ではRange(" ")の中に入るのは、A1などしか分かりません。 よろしくお願いします。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Integer, myRange As Range Set myRange = Worksheets("顧客").Range("顧客コード") With Target '変更されたセルがD5だったら If .Row = 5 And .Column = 4 Then '顧客コードの位置を取得 r = Application.WorksheetFunction _ .Match(Target.Value, myRange, 0) 'セルに顧客名を表示 Range("F5") = Worksheets("顧客").Range("B1").Offset(r - 1).Value End If End With End Sub

  • rangeに変数代入でエラー

    VBA初心者です。お願いします。 下記のように最終セルのアドレスを取得し、セル範囲を選択したいのですがたのですが、エラーが出てしまいます。どなたか助けてください。 ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate l = ActiveCell.Column 'アクティブセルの列番号 d = ActiveCell.Row 'アクティブセルの行番号 ad = ActiveCell.Address 'アクティブセルのアドレス Range("A1:ad").Select

  • VBAのRangeについて

    VBAのRangeについて質問があります。 以下のような表があった場合、VBAにて動的に図を作成したいのですが、Rangeの使い方がよく分かっておりません。 A列   B列  C列    D列  E列・・・ --------------------------------------------     りんご バナナ  すいか ・・・ A店   200円  100円  500円 ・・・ B店   180円  130円  800円 ・・・ C店   220円  150円  650円 ・・・ やりたいことは、 ・A列とB列を選択してグラフを作成 ・A列とC列を選択してグラフを作成 ・A列とD列を選択してグラフを作成   ・・・・・・ というようなグラフを作成したいと考えております。(列は動的です。) 【駄目だった例】 Range(Range(Cells(1, 1), Cells(4, 1)), Range(Cells(1, 3), Cells(4, 3))).Select このように書くと、A列からC列まで全て選択されてしまいます。 (A列とC列だけ選択して、B列は除外したい。) ご存知の方がおりましたら、回答していただけると助かります。

  • エクセルVBAについて

    エクセルVBAについて 下にある、1行目に入力された数値の、選択したセルの数値を、B5セルに表示させるマクロなのですが、1行目が結合していると、うまくB5セルに表示できません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If Target.Count > 1 Then Exit Sub    '●複数セル選択は無視  If Target.Row <> 1 Then Exit Sub    '●1行目以外の選択は無視  If Target.Column > 6 Then Exit Sub   '●F列目以降の選択は無視  If Target.Value = "" Then Exit Sub   '●選択セルが未入力なら無視    Range("B5").Value = Target.Value End Sub このマクロで、結合しているセルをB5に表示させることはできますでしょうか? 1行目で選択するセルは、すべて2つのセルが結合しています。 よろしくお願いいたします。

  • VBA Rangeの使い方

    こんにちは、VBA初心者です。 Range("D68:D69").Select これを、「アクティブのあるひとつのセル(この場合はD68)の、下のセル(D69)を選択する」 としたいのですが、どう書いたらいいのか解りません。 よろしくお願いします。

  • エクセル VBA で列番号を足す方法は?

    こんにちは。大変お世話になっています。 Set btd = Range("d2:z2").Find(bmd) といったVBAを使用し、あるセル番地を抜き出しました。 そのセルの列番号のみを抜き出して、そこから列番号を右へいくつか動かしたいのですが、その方法がわかりません。 別の定義で出した行をgとして Cells(g, btd.Column)でセルの指定をしました。 このセルがa1だとします。 次の作業として、b1のセルを指定したいのですが、その方法がわからないのです。 b=Cells(g, btd.Column) と定義して、 b.Offset(0, 1).Value などと書いてもエラーになってしまいます。 行番号なら数字を足したり引いたりすればできたのですが、アルファベットの列番号の場合はどうしたら良いのでしょうか? すみませんがよろしくお願いします。

  • 塗りつぶしをしたセル色を特定のセルのフォント文字に

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveSheet.Protect UserInterfaceOnly:=True Dim mycolor If Target.Column Mod 1 = 0 And Target.Column >= 4 And Target.Column <= 24 Then mycolor = Target.Interior.ColorIndex Range("B5:B38").Font.ColorIndex = xlAutomatic Range("B" & Target.Row).Font.ColorIndex = mycolor Else mycolor = xlAutomatic Range("B5:B38").Font.ColorIndex = xlAutomatic End If End Sub お世話になります、このコードは列D~Uまでの4~24列の特定の箇所のセルを塗りつぶしにしています。 その塗りつぶしたセルを選択されているとB5~B38に記入されている文字が塗りつぶされた文字と一緒になると言うVBAです。 質問がいくつかあります。 (1)D列~U列の38行目以降のセルを選択すると「FontクラスのColor Indexプロパティを設定出来ません。」となります。多分B38以降にはセルが塗りつぶしされておらず、B38以降に文字が書かれていないのでエラーとなってしまうのではないかと思います。これの解決策はありますか? (2)E5~E38のセルのどこでも良いので数字を入力したら、E5~E38が同じ数字に自動変換するVBAは出来るのでしょうか? (3)同じようにT5~T38のセルのどこでも良いので数字を入力したら、T5~T38が同じ数字に自動変換するVBAは出来るのでしょうか? (4)同じようにD6~D38のセルのどこでも良いので数字を入力したら、D6~D38が同じ数字に自動変換するVBAは出来るのでしょうか?

  • EXCEL-VBAでRangeの末端の座標値を取得できますか?

    Activecell.row / column でセルの座標値が取得できますが、範囲(例えば a1:c5 )を選択している時の、rangeの末端の座標 (この場合では c5 = ????.row=5,????.column=3) を取得する方法をご存知の方、教えてください。