• ベストアンサー

exlel  繰り返し マクロ VBA

エクセルのシートで    A    B  1空白   100  2空白   A  3空白   B  4空白   C  5空白   空白  6空白   空白  7空白   200  8空白   A  9空白   B 10空白   空白 11空白   300 12空白   A 13空白   B 14空白   C 15空白   D 16空白   空白 上記のデータを下記の様に空白行をはさんだ不特定行のB列の各行のはじめのセルの値をA列に書き込んでいくマクロをお教えください。    A    B  1100    100  2100    A  3100    B  4100    C  5100    D  6空白   空白  7200    200  8200    A  9200    B 10空白   空白 11300    300 12300    A 13300    B 14300    C 15300    D 16空白   空白 お願い致します。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

Sub try() Dim r As Range For Each r In Range("B:B").SpecialCells(xlCellTypeConstants, 3).Areas r.Offset(, -1).Value = r.Item(1).Value Next End Sub 空白行も詰めた方がよいのかな?

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

その他の回答 (3)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

シート1にデータがあるとして別のシートに表示させるのでしたらマクロでなくともよいのではないでしょうか? 別のシートの1行目は空の行として、A2セルには次の式を入力します。 =IF(ISNUMBER(Sheet1!B1),Sheet1!B1,IF(Sheet1!B1="","",A1)) B2セルには次の式を入力します。 =IF(Sheet1!B1="","",Sheet1!B1) 最後にA2セルとB2セルを選択してから下方にオートフィルドラッグします。

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

判りにくい質問表現だが、結果例があるので何とか判る。 文章でロジックを文章で表現できる力を磨けば良い。 この場合行単位のデータの処理の時系列的観点を追って考える。 ほとんどの場合(初歩的な課題の場合、本件もそう)上行から下へ1行ずつ、考える(For Next)で解決できる。 今処理している行より前の行のデータ状態の影響を受けるので、変数で、あとの行の処理のときのため、どう状態を受け渡すかが課題。 Flag処理的処理である。 ーー 結果シートのA列にセットすべき値を保持する変数を1つXを設ける。 ーー 最初はデータ開始行のB列をXへ 各行を全て1つづつ処理するが B列で空白行が現れるまでは、 x-B列の値 の対を別シートにセット B列が空白があれば読み飛ばし。 ただし最初の行は空白行として書き出し。 B列で空白以外が出現したらxにB列の値をセットして、 X-B列を別シートにセット。 以上の繰り返し。 ーーー 丸投げ質問にコードを書きたくないが 例データ A1:B20 (ただしA列は空白) A列   B列 100 A B C 200 A B 300 A B C D 400 x ーーーー Sub test05() Dim sh1, sh2 Set sh1 = Worksheets("Sheet2") Set sh2 = Worksheets("Sheet3") d = sh1.Range("B65536").End(xlUp).Row MsgBox d k = 2 x = sh1.Cells(1, "B") sh2.Cells(k, "A") = x sh2.Cells(k, "B") = x k = k + 1 For i = 2 To d If sh1.Cells(i, "B") = "" Then If sh2.Cells(k - 1, "B") <> "" Then x = "" '*1 sh2.Cells(k, "A") = "" sh2.Cells(k, "B") = "" k = k + 1 End If Else If x = "" Then '*2 x = sh1.Cells(i, "B") Else sh2.Cells(k, "A") = x sh2.Cells(k, "B") = x k = k + 1 End If End If Next i End Sub ーーー 結果 A1:B15 100 100 100 100 100 100 100 100 200 200 200 200 300 300 300 300 300 300 300 300 400 400

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

Sub macro() Dim C As Range Dim I As Integer ’B1からB列の最終行までループ For Each C In Range("B1", Range("B" & Rows.Count).End(xlUp)) '数字なら If IsNumeric(C.Value) Then ’数字を変数に格納 I = C.Value End If ’空白でないなら If C.Value <> "" Then  ’A列に変数の数字を入力 C.Offset(, -1).Value = I End If Next C End Sub

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

関連するQ&A

  • 【マクロ】クリックすると空白を含む列を非表示に

    上司にExcelのデータが見づらいと言われて困っています。 下記のようなマクロやVBAを教えていただけないでしょうか? 例えば、 A2のセルをクリックすると、その行(2行目)から空白セルを検索して、そのセルを含む列を非表示にして、データが入っている列だけを表するようなマクロってないでしょうか? (要は、C2とE2が空白セルのとき、A2をクリックして、A/B/D/F~の列だけ表示されるようになるマクロです。 同様に3行目でも、空白セルがB3、C3なら、A3をクリックした時、A/D/E…列だけ表示されて、B・C列が非常時になるような。) 似たような機能があれば、A2クリックでなく別にボタン等を作っても構いません。 ややこしくて、申し訳ございませんが、本当に困っているので、 どうかよろしくお願いいたします。

  • エクセル2010 繰り返しマクロ

    (1)g列の空白の最上行に =SUMPRODUCT(min((a:a>=f2)*(a:a<f2+730)*e:e)) と入力。 そのセルをコピーし、同じセルに値を上書き貼り付け ↓ (2)a列に(1)のセルの左隣のセル以下の数値がある行の、b列を削除 (画像の場合、(1)のセルがg1の場合、b2,b3を削除する) というのを、f列に数値がある行だけ繰り返すマクロの構文を教えてください。 大変お手数おかけいたしますが、どうぞよろしくお願いします。

  • Excelの関数またはマクロを教えて下さい。

    Exsel2000の関数で、現在以下の関数まで出来たのですが、これを応用して検索値「A1」を2つのセル「A1&B1」にしたいのですが、どうすればよいのでしょうか?どなたか方法を教えて下さい。 =VLOOKUP(A1,Sheet1!$A$1:$E$2000,4) 上記の関数から判るように、これは 例えばSheet2のC1のセルにこの式を入れる場合、A1と同じ内容の値を、Sheet1のA列から検索して、そして同じ行のSheet1のD列の値をSheet2のC1のセルに返すという関数です。 これを応用して、「A1と同じ内容…のA1を、A1&B1の2つが一致するセルを検索して、同じ列のSheet1のD列の値をSheet2のC1のセルに返すという関数にしたいのです。 どなたかおわかりになる方がおりました宜しくお願いいたします。 また、マクロを使う方法でも良いのですが、当方マクロは詳しくないので出来るだけ判りやすくお願いいたします。

  • エクセル マクロ VBA

    エクセルのマクロについて質問です。 『集計』というブックの『集計開始』というシートに     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 コメント  空白     空白   3行目 空白   空白     空白 4行目 商品名  支店     個数  5行目 空白   空白     空白 6行目 空白   空白   コメント1 7行目 空白   空白     空白 8行目 空白   空白   コメント2 9行目以降    上記のデータ(見出しを除く)の繰り返し というデータが入っています。 B列の中に『AAA』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 C列の中に『B』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 (今は、手作業で編集→置換→検索する文字列の中に『B*』と入力し、 置換後の文字列を空白にしてすべて置換ということをやっています。)                            ABC列(データーの入っている行まで)の空白を含む行を一括削除し、 以下のような形にしたいのです。     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 商品名  支店     個数  3行目 商品名  支店     個数          ・         ・ このようにするマクロ文はどのようになりますでしょうか?

  • VBA 今日の行にあるセル コピー 別シートへ

    (1)sheet1にボタン button1 があり、そのボタンを押すと、マクロが起動する。 (2)データは sheet2 貼り付け先は sheet3 sheet2 F列に日付が入っています。   F列は、日付(過去~本日まで ※未来の日付はありません)か、空白の場合があります。 F列の日付が本日のとき、 sheet2 A列のセルの値を sheet3 B列へ。  A列には連番。 sheet2 D列のセルの値を sheet3 C列へ。 sheet2 G列のセルの値を sheet3 D列へ。 sheet2 F列のセルの値を sheet3 E列へ。 それぞれ、Sheet3の各行の一番下に貼り付ける形をとりたいのです。 こちらでマクロはどうしたらよいのでしょうか。

  • エクセルのマクロについての質問です。

    エクセルのマクロについての質問です。 長文申し訳ございません。 Excelマクロが何度作り直してもうまく作動せず非常に困っております。 (1)ファイルAのシート1のDB列3行目に1の値をいれます。 (2)ファイルAのDC列172行目の値をファイルBのシート名が「1」のシートのD列4行目に入れます。 (3)ファイルAのDC列2733行目の値をファイルBのシート名が「1」のシートのD列6行目に入れます。 (4)ファイルAのDC列3128行目の値をファイルBのシート名が「1」のシートのD列7行目に入れます。 (5)ファイルAのシート1のDB列3行目に1.2の値をいれます。 (6)ファイルAのDC列172行目の値をファイルBのシート名が「1.2」のシートのD列4行目に入れます。 (7)ファイルAのDC列2733行目の値をファイルBのシート名が「1.2」のシートのD列6行目に入れます。 (8)ファイルAのDC列3128行目の値をファイルBのシート名が「1.2」のシートのD列7行目に入れます。 (9)以上のようにファイルAのシート1のDB列3行目に入れる値を0.2ずつ増やしていき、その値に対応したファイルBのシートに上記のように値を入れていくという動作を20まで繰り返す。 以上のようなマクロを作る事は可能でしょうか? マクロについて勉強はしているのですが上手く使いこなせず苦労しております。 長文の質問で大変申し訳ございませんがよろしければ皆さまのお知恵をお貸しください。 宜しくお願い致します。

  • ■ エクセルのマクロで出来ますか?

    エクセルマクロの初心者です。 現在、業務で以下の様な表を作成し、請求書の発行を行っています。 「sheet1」A列のNo.を「sheet2」のA列(例えばセルA1)に入力すると VLOOKUP関数で必要項目が請求書の雛形に表示される仕組です。 複数行を抽出する場合は、複数のNo.(例: 1,3,10)を手入力(例: A1,A2,A3・・・)しております。 ----- <sheet1>    A列  B列   C列   D列  ・・・ 1行 No.  項目1  項目2  項目3 ・・・ 2行  1   値1   値2   値3  ・・・ 3行  2   値4   値5   値6  ・・・ 4行  3   値7   値8   値9  ・・・ <sheet2> 請求書の雛形 セルA1~A10に請求書を発行したい<sheet1>A列のNo.を入力。 ----- これを、A列の左に行を挿入、各行にチェックボックスを配置し、 チェックボックスをオンにした行のB列(行挿入前はA列)の値(No.)を 「sheet2」のA列(例えばA1/複数の場合はA1,A2,A3・・・10行程度)に コピーを行う仕組を作ることを検討しています。 複数のNo.をチェック(1,3,10)した場合は、 「sheet2」のA1,A2,A3の様に、上から順になれば理想的です。 説明が悪く、意図が伝わり難いこととは思いますが、 これらの作業を行うマクロ(他の方法も可)を組むことは可能でしょうか。 ご教授いただければ幸いです。 よろしくお願いいたします。

  • エクセルマクロ、空白行(セル)の挿入

    データがA、B、C、D、E列100行まであります。 このうちD、E列を除き、エクセルのマクロで1行ごとに空白で10行挿入したいです。 (A、B、C、D列のデータに空白セルを10行分挿入し、下にシフトするイメージ。D、E列はそのまま。) ご教授頂きたく、お願いします。

  • ◯ならば、右セルをコピーし、1セルにまとめるマクロ

    エクセルのマクロで、顧客管理情報のシートを作成しています 例えば下のような二列のセルがありまして、(|は、セルの境目を表す) ◯ | A ◯ | B × | C ◯ | D この時、 ◯のついている行の値だけど、つなげたいと思っています。 この場合であれば、得たい値は「A、B、D」という値です。(AとBの間を ”,” などで区切ろうと考えています。 エクセルの関数でいえば「A1&","&A2」といったところでしょうか・・・ そのような操作を、上のテーブルでいえば「◯」のついているセルに対してのみ実行してもらうマクロを組みたいです。 このような場合、どうしたら良いでしょうか? アドバイスを、どうぞよろしくお願いいたします。

  • 別シートの行を選択し対象列を転記するマクロ

    シート2のA~F列までデータがあります。 行数は10,000行です。(月ごとに100行くらい追加されます。) A列は項目がNO.で半角数字が連番で入力されてます。 セルA2→1 セルA3→2 セルA4→3 . . . セルA10000→9999 セルA10001→10000 という感じです。 シート1の セルI9に番号を入力すると シート2のその番号の行のB~F列の値を シート1のJ9~N9列に転記したいです。 例えば シート1のセルI9に100と入力したら、 シート2のA列が100と入力されているセルはA101ですから 101行目となります。101行目の各列の値を転記します。 ↓ シート1のセルJ9にシート2のセルB101の値を転記 シート1のセルK9にシート2のセルC101の値を転記 シート1のセルL9にシート2のセルD101の値を転記 シート1のセルM9にシート2のセルE101の値を転記 シート1のセルN9にシート2のセルF101の値を転記 シート1もシート2もセルの書式設定は標準。 B,E,F列は半角英数字の組み合わせで C,D列は半角数字のみです。 たまにF列に空白がある行があります。 B,F列は数字のみの場合もあります。 B,C,D,F列は数字のみの場合 「数値が文字列として入力されています」 となっています。 マクロで行いたいのですが記述そのものを教えてください。

専門家に質問してみよう