• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで特定の条件だったらセル番地を記載)

VBAで特定の条件だったらセル番地を記載

このQ&Aのポイント
  • VBAを使用して、セルの値を見て特定の条件の場合にセル番地を記載する方法について説明します。
  • セルの値を確認し、条件が満たされている場合には該当するセル番地を出力します。
  • データの中から特定の条件に合致する部分を特定し、それぞれの部分の始まりと終わりのセル番地を取得します。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

1行目にはタイトル行を設け,2行目から実データにします。 sub macro1()  dim h as range  dim n  application.screenupdating = false  on error resume next ’対象範囲を抽出する  range("A1:A4098").autofilter field:=1, criteria1:=">0" ’順繰り書き出していく  for each h in range("A2:A4098").specialcells(xlcelltypevisible).areas  n = n + 1  worksheets("Sheet2").cells(n, "A") = h.address  next  activesheet.autofiltermode = false  application.screenupdating = true end sub

color1111
質問者

お礼

オートフィルターで対応するとは目からウロコでした! こちらの方法で希望のデータを得ることが出来ました。 ありがとうございました。

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

その他の回答 (5)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.6

#5です。改めて皆様のコードを眺めていたら、 コード記述の作法が違うので見落としておりましたが、keithinさんのコードと一緒ですね。 取り下げさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.5

面白そうなので参戦してみます。 A1は勝手に列見出しであるとさせていただきます。 結果は、2番目のシートに書き出します。A列開始番地、B列終了番地です。 Sub test() Dim targetRange As Range, myArea As Range, destRange As Range With ActiveSheet Set targetRange = .Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp)) Set destRange = Sheets(2).Cells(1) targetRange.AutoFilter field:=1, Criteria1:="<>0" For Each myArea In Intersect(targetRange, targetRange.Offset(1, 0)).SpecialCells(xlCellTypeVisible).Areas destRange.Value = myArea.Cells(1).Address destRange.Offset(0, 1).Value = myArea.Cells(myArea.Cells.Count).Address Set destRange = destRange.Offset(1, 0) Next myArea .AutoFilterMode = False End With End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

数式の戻り値でなく、生の実データということなら Dim crng As Range Dim brng As Range Dim c As Range Dim i As Long Application.ScreenUpdating = False Set crng = Range("A2", Range("A" & Rows.count).End(xlUp)) crng.Replace 0, "" Set brng = crng.SpecialCells(xlCellTypeBlanks) Set crng = crng.SpecialCells(xlCellTypeConstants) For Each c In crng.Areas i = i + 1 MsgBox c.Address & vbLf & _ i & "ブロック開始セル " & Split(c.Address, ":")(0) & vbLf & _ i & "ブロック終了セル " & Split(c.Address, ":")(1) Next brng.value = 0 Application.ScreenUpdating = True

全文を見る
すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

一例です。 シート1のA列のデータブロックをシート2のA列に抽出します。 シートタブ上で右クリック→コードの表示→以下のコード貼り付け→F5キー押下して下さい。 Sub sample() 範囲 = "A1:A4098" Application.ScreenUpdating = False Range(範囲).Select Cells.Replace What:="0", Replacement:="", LookAt:=xlWhole, _ SearchOrder:=xlByRows For Each gp In Selection.SpecialCells(xlCellTypeConstants).Areas i = i + 1 Worksheets("sheet2").Cells(i, 1) = gp.Address(0, 0) Next Selection.SpecialCells(xlCellTypeBlanks).Select Selection.FormulaR1C1 = "0" Range("A1").Select Application.ScreenUpdating = True End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 一例です。 ↓の画像のようにSheet1のデータは2行目以降にあり、Sheet2の2行目以降に表示するとします。 とりあえず、データのかたまりは2行以上続いているという前提です。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() 'この行から Dim i As Long Dim ws As Worksheet Set ws = Worksheets(2) i = ws.Cells(Rows.Count, 1).End(xlUp).Row If i > 1 Then ws.Rows(2 & ":" & i).ClearContents End If Application.ScreenUpdating = False If Cells(2, 1) <> 0 Then ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) = _ WorksheetFunction.Substitute(Cells(2, 1).Address, "$", "") End If For i = 2 To 4098 If Cells(i, 1) <> 0 Then If Cells(i - 1, 1) = 0 And Cells(i + 1, 1) <> 0 Then ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) = _ WorksheetFunction.Substitute(Cells(i, 1).Address, "$", "") ElseIf Cells(i - 1, 1) <> 0 And Cells(i + 1, 1) = 0 Then ws.Cells(Rows.Count, 2).End(xlUp).Offset(1) = _ WorksheetFunction.Substitute(Cells(i, 1).Address, "$", "") End If End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 仮にある行にデータがあり、上下のセルが「0」といったデータの場合別途コードを考える必要があります。 参考になりますかね?m(_ _)m

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

関連するQ&A

  • 【VBA】特定の条件でセルをコピー

    VBA初心者です 特定の条件を満たすセルの隣接する指定のセルをコピーして別のシートへ貼付けたいです 【sheet1】 A   B   C   ~   F  G 1   2   あ   ~   3  あり 2   1   い   ~   7  なし 3   2   う   ~   4  あり 5   3   え   ~   6  あり 6   2   お   ~   5  なし 7   1   か   ~   3  あり 8   3   き   ~   7  なし 9   2   く    ~  8  なし といったデータのうち、G列が「あり」の行の C~Fの値を別のシートへ以下のように貼り付けたいです 【sheet2】 A   ~   D  E あ   ~   3  _ う   ~   4  _ え   ~   6  _ か   ~   3  _ 全くの初心者です よろしくお願いします

  • VBAでセルの番地を増やす方法

    VBAで以下のようなコード書いたのですが、うまくいきません。 For i = 3 To 14 Step 1 xa = "d" & i xb = "b" & i Worksheets("月別").Range(xa) = Evaluate("SUMPRODUCT((nt)*(date>=xb))") Next i xaとxbにはセルの番地が入ります。for文の一回目の結果は、xaにはセル(B1)の値が入り、xbにはセル(D1)の値を入れたいです。二回目以降はセル(B2)、(D2)と行をずらして参照するようにしたのです。上記の方法でxaはセル番地が入り、うまくいっています。xbはセル番地として認識されていないようです。どうすればよいでしょうか?

  • 特定のセルの数値の行数だけコピーしたい

    お世話になります。 Excel2002で次のことをやろうとしています。 特定のセルに表示されている数値の行数だけコピーする。 これを、マクロを使って実行したいのですが、その方法が思いつきません。 どのようにしたら良いかお教えください。 [コピー元]のシートの"J53"のセルに、例えば「13」が表示されています。 この「13」がコピーする行数です。 このシートには多くのデータが入っていますが、そのうちの"A1"~"G13"だけのセルをコピーし、[コピー先]のシートの"A8"~"G20"に貼り付けるものです。 コピーする行数を表示しているセル"J53"は、常にこの位置です。 コピーするデータの列は常に"A"~"G"で、変わることはありません。 コピーするデータの行は、始まりは常に"1"からで、最後は"J53"に表示されている数値の行です。 コピーする行数を示す"J53"に表示される数値は「1」~「52」の範囲内です。 コピー先の位置は、[コピー先]のシートの"A8"~で、変わることはありません。 類似の質問を探したり、他にもネット上で探したのですが見つかりませんでした。 よろしくお願いします。

  • セル番地という言い方

    ExcelのA1やB1というセル番地の呼び方について 教えてください。 本には「列番号と行番号でセルの位置を表し、そ れをセル参照と言う」と記載されています。 セル番地と言う言い方と、セル参照という言い方、 どちらが正式ですか。

  • excelで○○と入力されているセル番地を返す方法

    excelについて質問です。 シートAに下記の記述をします。    A    B 1 項目名 セル番地 2 ○○  B7 のような形で、シートBからセル番地を引っ張ってくる方法はありますでしょうか。 セル番地が難しいようであれば、行、列を返す形でもよいです。 上手く質問ができず、申し訳ありません。 できればVBAは使わず、関数で処理できるとベターです。 宜しくお願いいたします。

  • セル番地を求める関数はありますか?

    一行目に日付が入ってるのですが 今日の日付を見つけて、そのセル番地を求める関数はありますか? A3セルにその値を入れたいです。

  • VBA ジャンプで検索した複数セル番地の取得

    教えてください。 一覧票の中で、#N/Aエラーになっているセル番地を拾って、別ワークブックに転記していきたいです。 試してみた方法ですが、 対象のデータをひらく→条件を検索してジャンプ→数値のエラー値を選択 →結果 #N/Aが出ているセル番地を1つだけ取得することはできました。ですが、複数該当している時は全てのセル番地が取得できないようです。(セルは複数選択された状態になっているのですがセル番地の一番若いものだけ取得しているようです) そもそもVBAで"条件を検索してジャンプ"から探そうとするのが無理なのでしょうか。

  • OfficeExcel2003:マクロを用いた特定行のセル毎の条件判定

    Microsoft Office Excel 2003を用いて簡単なデータ管理表を作っています。 その中で特定列の各セルに格納された値が一定の条件を満たした際に そのセルの設定を変更するマクロを実装したいと考えています。 ちょっと分かりづらいかもしれないので具体例を挙げます。 例えばB列の各セルに数値データが格納されているとします。 その数値データが100以上ならばそのセルの背景色を青に、-1以下ならば背景色を赤に変更する。 といった感じです。 全データ数(行数)は不定で必要があれば増やせるようにしたいです。 1データは複数行にまたがっており、判定する項目(列)はセルの結合を行っています。 また、一定行間隔で項目の見出しを記した行が挿入されています。 そのせいか、自分なりに組んでみたマクロはセルの走査がうまくいかず、オーバーフロウを起こしてしまいました。 結合セルでも問題なくデータ入力されている最後のセルまで順に検索していく方法はありますか? どなたか御存知の方いらっしゃいましたら、ご教授お願いします。 また、ネットで調べるのにも少し限界があるようなので 逆引き事典的に扱える、良いVBAの書籍がありましたら教えて頂けるとありがたいです。

  • Excel VBAでシート間でセルの値がコピペできない

    今日は、Excel VBAでシート間でセルの値を単純に飛ばすだけなのですが何故か隣のセルではうまくいくのにあるセル だけには、どうしてもその値が入っていきません。 勿論セル番地は間違っていません。 何か原因があるのでしょうか。 皆さん、同じような経験をされた方原因を教えて下さい

  • VBA処理でこんな条件処理ってできますか?

    VBA初心者です。VBAで下記の様な処理は可能でしょうか? 実行したい処理を箇条書きにしますのでご意見下さい。 不明点はご質問下さい。尚、期限がありますので、早めの回答よろしくお願いします。 ・EXCELシートはテーブル、データ、合計値入力用があります。  テーブルシートは10列程の数値があります。これを順番にデータシートに該当する数字を検索して行き(データシートには規則的に空白行が1行ごとに入っています)、あればその下にある数値を覚えておき、1つのデータの検索が終了したら、合計値シートの1つのセルに合計値を入力。これの繰返しです。 初心者の私には複雑な処理に思えるのですが、どなたかアドバイスよろしくお願いします。    

専門家に質問してみよう