• ベストアンサー

マクロでのセルの位置について

マクロ初心者なんですが、今自分なりにマクロを作成しているのですが、行き詰まってしまったので、質問させていただきます。 セル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)        ’セルの値を取得

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

remone_do
質問者

お礼

ありがとうございました。Cとういう変数はセルの意味なんですね。知りませんでした。これから上達するようにがんばります。

その他の回答 (6)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.6

セルを一つ、一つ移動して値を求めると遅くなるだけですよ。 以下のマクロでは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

remone_do
質問者

お礼

できそうなかんじです。ありがとうございました。

  • emsuja
  • ベストアンサー率50% (1075/2138)
回答No.5

#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

remone_do
質問者

補足

やってみましたが、統合したところに行くと空白になってしまいました。

  • Ce_faci
  • ベストアンサー率36% (46/127)
回答No.4

こんにちわ もしかしたら結合セルの値も取りたいのでしょうか。 IF LEFT(CC, 2)=$B THEN CC="$C" & RIGHT(CC,LEN(CC)-2) 試してません。

remone_do
質問者

補足

すみません。やってみましたができませんでした。私の質問の仕方が悪いみたいですね。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

セルの値を取得するならなにもいちいちセルをアクティブにしなくてもいいですよね? 仮に、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)
回答No.2

私ならこうします C = 5 Do CC = "C" & C AAA = Range(CC) ここで何らかの抜け出し処理 C = C + 1 Loop

remone_do
質問者

補足

それではダメなんです。C13がないので、空白になってしまうのです。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

I = I + 1 '移動値を1追加 AAA = Range("C5").Offset(I, 0).Value 'C5よりI下のセルの値を取得 ではだめなんでしょうか?

関連するQ&A

専門家に質問してみよう