質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • VBA

    1861questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • マクロ

    231questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

【修正】挿入した空白行の各セルに任意のデータを挿入するマクロが知りたいです

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 391

baker

score 1

 行いたい処理内容

ExcelのB列~I列までが処理対象の列
・B列で「1」が検出された場合、「1」が検出された行の上に空白行を挿入したい
※「1」の値をキーにして空白行を挿入
・挿入された空白行には各列で行いたい処理がある

  • B列:「0」を表記
  • C列/F列:任意の文字列(例:ZZ、XX)を表記
  • D列/E列/G列:処理なし(空白のまま)
  • H列/I列:空白であれば次行の値をコピー

※データの行数は毎回変動するため、最終行を取得しながら処理できたら有難いです。

 処理前のデータ例
A B C D E F G H I
1 A1 a a 1A a 01 11
2 A2 b b 2A b 02 22
3 A3 c c 3A c 03 33
1 B1 d d 1B d 04 44
1 C1 e e 1C e 05 55
 処理後のデータ例 ※希望形です
A B C D E F G H I
0 ZZ XX 01 11
1 A1 a a 1A a 01 11
2 A2 b b 2A b 02 22
3 A3 c c 3A c 03 33
0 ZZ XX 04 44
1 B1 d d 1B d 04 44
0 ZZ XX 05 55
1 C1 e e 1C e 05 55

 現状のマクロ(テストデータ)

データを処理して空白行の挿入まではネットで調べながらマクロを組めたのですが、
「下のセルをコピー」、「複数の条件を設定」で躓いて先に進めません…。
高望みは重々承知で知恵をお借りできたら嬉しいです。

>sazi様
以下はテスト用として作成途中のマクロです。
質問では"B列の「1」をキー"としていますが、
テスト段階では以下の処理を行っています。
("マークダウンで括る"の認識が間違っていたら申し訳ございません)

・A列(データ毎にナンバリング)を最終行から読んでいき、値が変化したら空白行を挿入
・挿入した空白行のB列に文字列"AA"を挿入
・(1行目はヘッダーが設定されているので)2行目の空白行は書式設定クリア

▼テストデータ

A B C D E
1 a a A1
2 d d B1
2 d d B2
3 e e C1
3 e e C2
3 e e C3
Sub Macro1()
  Dim i As Long
  Dim S As String

  For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
   If Range("A" & i).Value <> Range("A" & i - 1).Value Then
    Rows(i).Insert
    Cells(i, 2).Value = "AA"
    Cells(i, 3).Value = Cells(i, 1).Value
   End If
  Next i
  Rows(2).ClearFormats
End Sub


本番データにもあるナンバリングが信頼できるデータではないため、
できれば質問にある値をキーにしたいです。

 補足情報(FW/ツールのバージョンなど)

Excel2010

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sazi

    2018/06/10 18:57

    現状組み込んでいる途中のマクロも情報として追記されて下さい。その際にはマークダウンで括ってください。

    キャンセル

回答 2

checkベストアンサー

0

ども^^

最初の方の例のサンプルコードです。

Sub test()
    Dim rng As Range
    Dim r As Range
    Dim ix As Long

    Set rng = Range("B1").CurrentRegion
    For ix = rng.Rows.Count To 1 Step -1
        If rng(ix, "A").Value = 1 Then
            With rng.Rows(ix)
                .Insert
                With .Rows(0)
                    .Range("A1").Value = 0
                    .Range("B1").Value = "zz"
                    .Range("E1").Value = "xx"
                    .Range("G1:H1").Value = .Range("G2:H2").Value
                End With
            End With
        End If
    Next
End Sub

最初のデータと、後のデータと、
キーブレークと判断される条件が全然違いますが、どうしたいのでしょう。。。?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/11 14:33

    ありがとうございます!!!まさにこれです!!!
    後に提示したテストデータは、
    試作段階でA列に入っているナンバリング(B列の色別で数字を割振)をキーにして
    行挿入などの動作を行おうと組み立てていたのですが、本番で受領したデータにあった
    同様のナンバリングが正しく割り振られていなかったため、本番データに入っていた
    枝番(前者データのB列)をキーにしたくご相談した次第です。
    作成いただいたコードを正しく理解して今後に活かしたいと思います。
    本当にありがとうございました!助かりました!

    キャンセル

0

何が知りたいのか曖昧な為、以下を回答として求めていると決めます。
・「キーである1を持つセルの次セルをコピー」

恐らくforを用いて一行ずつ処理を繰り返していると思います。
であれば、次のようにしているのでしょう。

for(i = 0,0 < x i ++)
{
  if(cell[1,i].value == 1)
    {
        Process();
    }
}

下のセルをコピーするには、
現在のiに+1した値でセルを指定して値を取得してやればいいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/10 20:59

    早速の回答ありがとうございます。
    いただいたコードを試してみたいと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    VBAで、データの下に行追加(値を入れたりもしたい)

    やりたいこと データを入れてから、並び替えを名前を基準に並び替えます。 →ここの部分はできてます。 次に例えばなのですが、、、 1.テスト 2.テスト 3.テスト 4

  • 解決済

    VBA ソート等をした後の処理(見出しと罫線)

    現在できていること Sub Test() 'データの並び替え Const topleft = "H11" With ActiveSheet

  • 解決済

    html表の書き方について

    前提・実現したいこと htmlで表を表示する場合の書き方について教えてください。 発生している問題・エラーメッセージ htmlで表を記載する際に同一カラム内で 以下のよ

  • 受付中

    ExcelVBAでVLOOKUPの表記方法

    前提・実現したいこと 福祉施設のタイムカードを作ってます。 VLOOKUPで氏名、受給者番号、事業者番号、所属先をフォームの受給者番号から 利用者シートの(所属先名)(氏名)

  • 解決済

    VBAのDictionaryオブジェクトの質問

    Dictionaryオブジェクトを使って割り付けをしています。 2つのシートがあります。 『抽出結果』シートと『条件』シートです。 『条件』シートのA列、B列、c~複数列にデ

  • 解決済

    VBA Findメソッドでの日付検索について

    VBAのfindメソッドで日付の検索が上手く行きません。 色々とググって日付をシリアル値に直してから、LookInをxlFormulasにして実行すればヒットするって色んなサイトに

  • 解決済

    Excel VBA 特定範囲の重複している列に空白を設定する

    お世話になっております EXCELのVBAや関数を使用し、下記の様な表を編集したいと思っております。 置換前 グループ 項目1* 項目2 項目3 項目X 項目Y

  • 受付中

    Excelで分単位でバラバラに記録されたデータから将来予測

    前提・実現したいこと 艦これの支援ソフト「航海日誌拡張版」から出力される資源ログのデータをもとに、指定日を初日として、このまま遠征等を続けたらいかほど資源が獲得できるかを将来予測す

同じタグがついた質問を見る

  • VBA

    1861questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • マクロ

    231questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。