- ベストアンサー
マクロでのセルの位置について
マクロ初心者なんですが、今自分なりにマクロを作成しているのですが、行き詰まってしまったので、質問させていただきます。 セルC5から下に1つずつセルを移動してセルの値を取得していくのですが、セルC13はB13と統合していて、セルがその位置にくると、C13ではなくてB13になります。そこからセルを1つ下に移動するとB14になってしまいます。それをC14にしたいのですが、何かいい方法はないでしょうか?お願いします。 C = 5 CC="C" & C Range(CC).Offset(1, 0).Activate '次の行にセルを移動させる CC = ActiveCell.Address ’セルのアドレスを取得 AAA = Range(CC) ’セルの値を取得
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 最初に、質問以外になりますが、 >C = 5 >CC="C" & C >Range(CC).Offset(1, 0).Activate '次の行にセルを移動させる こういうことは、早めに直したほうがよいですね。 C という変数は、通常、セルの意味ですから、ループのインクリメント変数で使用するのは、 i,j,k などです。決まりではありませんが、見やすいです。 それと、Activate ではなくて、それは、Select なんですね。 .Activate は、少し意味が違います。ほとんど、.Activate は使用しません。かなり上達したら、その意味が分かります。 ただ、なかなか、入門レベルですと、結合セルの扱いは難しいです。 ---------------------------------------------------- Sub TestMacro() Dim i As Long For i = 1 To 10 With Range("C5").Offset(i - 1) 'C5からだから、Offset(i-1) If .MergeCells Then .MergeArea.Value = i Else .Value = i End If End With Next i End Sub
その他の回答 (6)
- zap35
- ベストアンサー率44% (1383/3079)
セルを一つ、一つ移動して値を求めると遅くなるだけですよ。 以下のマクロではC5:C15の値を表示します。結合セルの判断も入れていますので参考になれば… Sub Macro1() Dim C As Integer For C = 5 To 15 With Cells(C, "C") If .MergeCells Then MsgBox (.MergeArea.Cells(1, 1).Value) Else MsgBox (.Value) End If End With Next C End Sub
お礼
できそうなかんじです。ありがとうございました。
- emsuja
- ベストアンサー率50% (1075/2138)
#2 です C13 と B13 を結合しなければならない理由にもよりますが ソースは汚くなりますがこれなら他の行で同じような 結合セルがあっても対応できるのではと思います r = 5 Do Select Case C case 2 C = 2 ’ B 列に移行 Case Else C = 3 ’ 通常は C 列 End Select AAA = Cells(r, C).Value 'ここで何らかの抜け出し処理 r = r + 1 Loop
補足
やってみましたが、統合したところに行くと空白になってしまいました。
- Ce_faci
- ベストアンサー率36% (46/127)
こんにちわ もしかしたら結合セルの値も取りたいのでしょうか。 IF LEFT(CC, 2)=$B THEN CC="$C" & RIGHT(CC,LEN(CC)-2) 試してません。
補足
すみません。やってみましたができませんでした。私の質問の仕方が悪いみたいですね。
- merlionXX
- ベストアンサー率48% (1930/4007)
セルの値を取得するならなにもいちいちセルをアクティブにしなくてもいいですよね? 仮に、C5からC20までの値をD1~D16に抜き出す場合、以下のようにすれば途中にいくつ結合セルがあってもOKです。 Sub test() For i = 5 To 20 Cells(i - 4, "D").Value = Cells(i, "C").MergeArea.Value Next End Sub
- emsuja
- ベストアンサー率50% (1075/2138)
私ならこうします C = 5 Do CC = "C" & C AAA = Range(CC) ここで何らかの抜け出し処理 C = C + 1 Loop
補足
それではダメなんです。C13がないので、空白になってしまうのです。
- mshr1962
- ベストアンサー率39% (7417/18945)
I = I + 1 '移動値を1追加 AAA = Range("C5").Offset(I, 0).Value 'C5よりI下のセルの値を取得 ではだめなんでしょうか?
お礼
ありがとうございました。Cとういう変数はセルの意味なんですね。知りませんでした。これから上達するようにがんばります。