- 締切済み
表の横の列を取得
エクセルで表の欄外の、表の横の列を取得する、 というBVAはあるのでしょうか。 具体的に列のAとかBを指定するコード?は あると思うのですが、表の欄外の横の列に合計を表示させたい、 となった場合を考えています。 たとえば表がA1~C5という場合もあると思いますし 表がA2~D6という場合もあると思うので、臨機応変に 欄外に合計額を表示させたいと思っていました。 そうでなければ、都度、表の場所などが変わるごとに VBAを書き換える必要が出てくると思うのです・・・。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
ご質問のような、 汎用的に表の最終列を求めるニーズがあるかどうか定かではありませんが、 表は必ず罫線で囲まれているという前提でよければ 縦方向の罫線の引かれた最終列を求めるアイディアが思いつきます。 後記コードがそのマクロです。 よかったら参考にしてください。 なお、仕様は、 調査対象範囲の行の中で 縦方向の罫線の引かれた最も右にあるセルの列番号を求めています。 Sub sample() Const BgnR = 1 '調査開始行番号 Const EndR = 5 '調査終了行番号 Dim LastCol As Long Dim R As Long Dim C As Long LastCol = 0 For R = BgnR To EndR For C = Columns.Count To 1 Step -1 If Cells(R, C).Borders(xlEdgeRight).LineStyle <> xlNone Then If LastCol < C Then LastCol = C End If End If Next C Next R If LastCol <> 0 Then MsgBox "表の最終列番号=" & LastCol Else MsgBox "縦方向の罫線はありません" End If End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
こんなの常識だと思う。 まず実在データのセル範囲を掴むとき必要になる。 普通は、(1)行ー下端(2)列ー右端 が問題になるが (2)は、例として Sub test01() i = 2 c = Cells(i, "XFD").End(xlToLeft).Column MsgBox c End Sub をやって見るとよい。 これはEndキーを押して左矢印←キーを押す操作を意味する。 XFD列でなくても、その課題でこの列より右列にでーたがないと確信できるなら、100列とかでも良いだろう。 ーー Endキーを押して、その後左矢印←キーを押す操作を、日ごろあまり使ってないのかな。上記は、それに相当する、VBAでの処理だ。それでVBAをやるというのは、頭でっかちの気がする。
- SI299792
- ベストアンサー率47% (780/1632)
範囲をどうやって指定するかが問題になります。 以下は、範囲指定をしたらその右に合計数式を入れるBVA でなくVBA です。 A1~C5を選択して実行すれば、 D1: =SUM(A1:C1) が入り、D5までコピペします。 A2~D6を選択して実行すれば、 E2: =SUM(A2:D2) が入り、E6までコピペします。 ' Sub Macro1() ' Selection.Columns(Selection.Columns.Count).Offset(, 1) = _ "=SUM(" & Selection.Rows(1).Address(False, False) & ")" End Sub
お礼
有難うございます。 とても複雑だと思うので、 改めて基礎を学んでいきたいと思いました。