• ベストアンサー

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

マクロ初心者なんですが、今自分なりにマクロを作成しているのですが、行き詰まってしまったので、質問させていただきます。 セル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% (1036/2059)
回答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% (1036/2059)
回答No.2

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

remone_do
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

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

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

関連するQ&A

  • EXCELでENTERキーでセルの移動マクロ

    こんにちは。 EXCELでENTERキーでセルの移動マクロを使いたいのですが、下記のマクロで改良を教えてもらいたいと思います。 まず、最初は必ず、セルB5にフォーカスしたいということ。そうして、できればOFFSETを使わないで、rangeかcellを使いたいのですが、お願いします。 Sub セル移動() Range("B5").Select Select Case ActiveCell.Column Case 1 ActiveCell.Offset(1, 1).Activate Case 2 ActiveCell.Offset(2, 2).Activate Case 3 ActiveCell.Offset(1, 1).Activate Case 4 ActiveCell.Offset(1, 1).Activate End Select End Sub

  • マクロよ動け

    VBA 難民です。 Excel で、左のセルが空白の場合、印刷文字を見えなくするつもりのマクロを作ってみましたが、知らん顔をされます。声の掛け方がまだよくわかってないのです。 こっちを向かせる方法を教えて下さい。よろしくお願いします。 Sub MacroWhiter() Dim a As Variant Dim b As Variant a = ActiveCell.Value b = ActiveCell.Offset(0, -1).Value '一つ左のセルの値 Range("B1").Activate 'ここから始める Do Until IsEmpty(ActiveCell.Value) '空きセルまで続ける If b = 0 Then 'ゼロの場合 ActiveCell.Font.Color = 2 '文字を白色にする ActiveCell.Offset(1, 0).Activate '下の行に移る End If Exit Do Loop '繰り返す a = ActiveCell.Value

  • Excelマクロ:変数でセル範囲指定

    マクロの迷い人です。 Excelの表をマクロで印刷しようと思っています。 行の数が毎回違うため、最終セルもその都度指定しなければなりません。 A1 B1 A2 B2 A3 B3 A4 B4 この例で、A5 B5 以降は空セルとします。 印刷範囲を Range("A1:B4")と書かずに、そのときどきのアクティブセルを変数に代入し、変数を使って範囲指定したいのです。 Sub MacroTest () Dim a As Variant Dim b As Variant Range("B1").Activate Do While a <> 0 ActiveCell.Offset(1, 0).Activate '空白でなければ一つ下に移る a = ActiveCell.Value Loop ActiveCell.Offset(-1, 0).Activate '上の行に移る b = ActiveCell.Value Range("A1:"& b).Select End Sub こうしてみましたがダメでした。 デバッグの方法がわからないので教えて下さい。よろしくお願いします。

  • 行方向の同じ値のセルを結合するマクロ

    ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。 どうぞよろしくお願いいたします。 Sub セル結合() Dim r As Integer '行数 Dim i As Integer 'カウンタ r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1 Application.DisplayAlerts = False For i = 1 To r Cells(i, 1).Activate '項目の一つ下のセルをアクティブに If ActiveCell.Value = ActiveCell.Offset(1).Value Then Range(ActiveCell, ActiveCell.Offset(1)).Merge End If Next Application.DisplayAlerts = True End Sub

  • マクロの処理速度向上

    教えてください。マクロ初心者です。以下のようなマクロを組みました。 Sub 処方箋一覧() Dim vbOK As Integer Set WS1 = Worksheets("sheet1") Set WS7 = Worksheets("sheet7") WS7.Select Range("b2").Select Selection.End(xlDown).Select ActiveCell.Offset(1, -1).Select ActiveCell.Offset(0, 1) = WS1.Range("B3") ActiveCell.Offset(0, 2) = WS1.Range("h3") ActiveCell.Offset(0, 3) = WS1.Range("q3") ActiveCell.Offset(0, 4) = WS1.Range("v3") ActiveCell.Offset(0, 5) = WS1.Range("y3")         ~中略~ ActiveCell.Offset(0, 167) = WS1.Range("w75") ActiveCell.Offset(0, 168) = WS1.Range("x75") vbOK = MsgBox("入力完了!!", vbOKOnly, "処理確認") If vbOK = 1 Then Worksheets("sheet1").Activate End If End Sub 合計で167のセルを違うシートに転記するマクロです。 動作するのですが、速度が非常に遅くて困っています。 処理速度を向上させるようなマクロの組み方を調べているのですが、わからず困っています。どなたか、教えていただけると助かります。 よろしくお願いいたします。

  • Excelのマクロについて

    Excelについて全くの初心者で、今から勉強を始めるところですが、急遽、次のようなマクロを作成したいです。 アクティブなセルから右に6つ目のセルとそのセルから右に1つ、下に1つ目のセルに現在の時間を記入 どのように記述すればよいでしょうか。 ちなみに、的はずれかもしれませんが、以下のようなマクロを作りましたが、うまくいきませんでした。 よろしくお願いします。 Sub 時間入力() ActiveCell.Offset(0, 6).Activate SendKeys "^(:)" SendKeys "{TAB}" ActiveCell.Offset(1, 0).Activate SendKeys "^(:)" SendKeys "{TAB}" End Sub

  • エクセルで行を非表示にするとアクティブなセルが・・・

    エクセルで行を非表示にするとアクティブなセル?行?がどこかわからなくなり、マクロでアクティブなセルを移動するときにエラーが出ます。 Sub example() ActiveSheet.Range("D3").Select Do Until ActiveCell = 23 If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -3).Select ElseIf ActiveCell <> "" Then ActiveCell.Offset(1, -6).Select Else: ActiveCell.EntireRow.Select Selection.EntireRow.Hidden = True ActiveCell.Offset(0, -6).Select End If Loop End Sub 一番下のActiveCell.Offset(0, -6).Select にエラーが出るのですが、どうすればセルを移動できるでしょうか?

  • マクロでテーターを転記した時の空白なしに

    いつもお世話になります。 WINDOWS7 EXCEL2010 です。 添付図で説明させていただきますと、 右側の「請求書」のL5:O9 のデーターを左の「売上表」に下記のマクロにて転記します。 元の値(請求書 L5:O9)の範囲内のデーターが1行 2行 3行 4行は空白行が又は5行の場合はすべてが埋まったりします。 この場合5行の時はいいのですが、例えばデーターが3行の時は添付図で言いますと5の行6の行のように2行が空白になります。 下記のマクロの構文をどういう具合にすればいいか御指導願えませんでしょうか。 参考に、 L5 =IF(B15="","",B15) M5 =IF(L5="","",$A$2) N5 =IF(L5="","",C15) O5 =IF(L5="","",H15) ※ 下記のようにしたかったのですがマクロに詳しくないのと時間がないので上記のような方法になり少し遠回りです。 ‘Range("B1").Select ‘ActiveCell.Offset(1, 0).Activate マクロです。 Sub 売上表へ転記() Dim ID As Long Dim 納品日 As Date ID = Range("M5").Value 日付 = Range("L5").Value Range("L5:O9").Copy Sheets("売上表").Activate Range("A65536").End(xlUp).Activate '販売記録A2がアクティブセル(タイトル行) ActiveCell.Offset(1, 0).Activate ActiveCell.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False 'A2:E2 ActiveCell.Offset(0, 4).Activate 'C2が空白 Do Until ActiveCell.Offset(2, 0).Value = "" ActiveCell.Value = ID 'G2 ActiveCell.Offset(0, 0).Value = 納品日 'A3 ActiveCell.Offset(1, 0).Activate Loop End Sub

  • excel vbaでの質問になります

    このようなマクロを作成したのですが、セルに数式が入れてあると、どうしてもその下の空白の行に値を入力されてしまいます。 数式が入っているセルにもそのままセルに値を入れたいのですが・・ 宜しくお願いします。 Dim wb1 As Worksheet, r1 As Range Dim N As Integer, i As Integer Dim mycount As Long   Set wb1 = ThisWorkbook.Worksheets("請求書") mycount = Range("B111").CurrentRegion.Rows.Count Cells(111 + mycount, 2).Select ActiveCell.Offset(0, 0).Value = wb1.Range("C60").Value ActiveCell.Offset(0, 1).Value = wb1.Range("C61").Value ActiveCell.Offset(0, 12).Value = wb1.Range("C66").Value ActiveCell.Offset(0, 13).Value = wb1.Range("C74").Value ActiveCell.Offset(0, 14).Value = wb1.Range("C75").Value ActiveCell.Offset(0, 15).Value = wb1.Range("C84").Value ActiveCell.Offset(0, 16).Value = wb1.Range("C85").Value ActiveCell.Offset(0, 20).Value = wb1.Range("C69").Value ActiveCell.Offset(0, 22).Value = wb1.Range("C68").Value ActiveCell.Offset(0, 23).Value = wb1.Range("C76").Value ActiveCell.Offset(0, 24).Value = wb1.Range("C77").Value Exit Sub

  • マクロでテーターを転記した時の空白なしに

    いつもお世話になります。 WINDOWS7 EXCEL2010 です。 添付図で説明させていただきますと、 右側の「請求書」のL5:O9 のデーターを左の「売上表」に下記のマクロにて転記します。 元の値(請求書 L5:O9)の範囲内のデーターが1行 2行 3行 4行は空白行が又は5行の場合はすべてが埋まったりします。 この場合5行の時はいいのですが、例えばデーターが3行の時は添付図で言いますと5の行6の行のように2行が空白になります。 下記のマクロの構文をどういう具合にすればいいか御指導願えませんでしょうか。 参考に、 L5 =IF(B15="","",B15) M5 =IF(L5="","",$A$2) N5 =IF(L5="","",C15) O5 =IF(L5="","",H15) ※ 下記のようにしたかったのですがそれ程詳しくないのと時間がないので上記のような方法になり少し遠回りです。 ‘Range("B1").Select ‘ActiveCell.Offset(1, 0).Activate マクロです。 Sub 売上表へ転記() Dim ID As Long Dim 納品日 As Date ID = Range("M5").Value 日付 = Range("L5").Value Range("L5:O9").Copy Sheets("売上表").Activate Range("A65536").End(xlUp).Activate '販売記録A2がアクティブセル(タイトル行) ActiveCell.Offset(1, 0).Activate ActiveCell.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False 'A2:E2 ActiveCell.Offset(0, 4).Activate 'C2が空白 Do Until ActiveCell.Offset(2, 0).Value = "" ActiveCell.Value = ID 'G2 ActiveCell.Offset(0, 0).Value = 納品日 'A3 ActiveCell.Offset(1, 0).Activate Loop End Sub

専門家に質問してみよう