とあるデータを作成したいのですが量が膨大で
手作業だとミスが発生する可能性が高いのと、期日に間に合わない為
できる限り手作業を減らしたいといった感じです。
データは以下のようになってます。(Excel2007です)
「シート1」
__A __________B_______ C
4 神奈川県 青葉区 青葉区
5 神奈川県 青葉区 青葉区
6 神奈川県 青葉区 青葉区
7 神奈川県 青葉区 青葉区
8 神奈川県 青葉区 青葉区
「シート2」
青葉区
緑区
○○区
××区
~
手作業による手順です。
「シート1」4~8行をコピー
9行目に貼り付け
「シート2」に移る
青葉区はできているので次の文字をコピー(上記では(緑区))
「シート1」に戻る
9行目以降の「青葉区」の文字を「緑区」に全て置換
10~14行目をコピー
15行目に貼り付け
「シート2」に移る
緑区の次の文字をコピー(上記では(○○区))
「シート1」に戻る
15行目以降の「緑区」の文字を「○○区」に全て置換
~以降シート2のエリア名分が終わるまで繰り返し。
以上、シート2のエリア名を入れ込んでシート1のデータを完成させたいのですが。
エリア名が1400以上あるので、確実にどこかで間違える気がします。
一部だけでも自動化なり、ミスを減らす方法、早くできる工程はないかと
思いましてこの場を借りさせていただきました。
自分なりに考えたり調べたりしたのですが、関数はまずこの場合
向いてないのでマクロかなと思ったのですが
どんどん作るデータが下にずれ込んでいく場合のマクロの使い方もよくわからず、
調べてる時間もない為、非常に困っています。
自分なりにまだ調べてはいきますが、よろしければご協力いただければと思います。
長くなりましたが、よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
こんばんは!
一例です。
Sheet2「区」のデータはA列の2行目からあるとします。
Alt+F8キー → VBE画面が出ますので、↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub test() 'この行から
Dim i, j, k As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("sheet1")
Set ws2 = Worksheets("sheet2")
For i = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row '※注
j = ws1.Cells(Rows.Count, 1).End(xlUp).Row - 4
If ws1.Cells(j, 2) <> ws2.Cells(i, 1) Then
Range(ws1.Cells(j, 1), ws1.Cells(j + 4, 3)).Copy
ws1.Cells(Rows.Count, 1).End(xlUp).Offset(1).Select
ActiveSheet.Paste
k = ws1.Cells(Rows.Count, 1).End(xlUp).Row - 4
Range(ws1.Cells(k, 2), ws1.Cells(k + 4, 3)) = ws2.Cells(i, 1)
End If
Next i
Application.CutCopyMode = False
ws1.Cells(Rows.Count, 1).End(xlUp).Offset(1).Select
End Sub 'この行まで
尚、Sheet2の「区」のデータがA列の1行目からある場合は
コード内の ※注 の行を
>For i = 1 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
に変更してみてください。
以上、参考になれば良いのですが
外していたらごめんなさいね。m(_ _)m
No.4
- 回答日時:
今仮に、Sheet2において「青葉区」と入力されているセルが、Sheet2のA1セルであるものとします。
まず、適当な空きシート(例えばSheet3)のA4セルに次の関数を入力して下さい。
=IF(INDEX(Sheet2!$A:$A,ROUNDUP(ROWS($4:4)/5,0))="","",IF(ISNUMBER(Sheet1!A$4),Sheet1!A$4,SUBSTITUTE(Sheet1!A$4,Sheet2!$A$1,INDEX(Sheet2!$A:$A,ROUNDUP(ROWS($4:4)/5,0)))))
次に、以下の操作を行って下さい。
Sheet3のA4セルにカーソルを合わせてマウスを右クリック
↓
現れた選択肢の中にある[コピー]をクリック
↓
名前ボックス(A1セルの上にある、選択したセル範囲等が表示される欄)に、
A4:C7503
などという具合に、Sheet1の表を全てカバーするのに充分なだけのセル範囲を入力
※上記はエリア数が1500の場合の話で Sheet1の表の行数は3+1500×5=7503行が必要となります。
(カバーする範囲の方が広ければ、丁度同じだけの範囲である必要はありません)
↓
A4:C7503のセル範囲が選択されている状態で、選択範囲を示す黒い太枠の内側にカーソルを合わせてマウスを右クリック
↓
現れた選択肢の中にある[コピー]をクリック
↓
Sheet1のA4セルにカーソルを合わせてマウスを右クリック
↓
現れた選択肢の中にある[形式を選択して貼り付け]をクリック
↓
現れた「形式を選択して貼り付け」ダイアログボックスの「値」と記されている箇所をクリックして、チェックを入れる
↓
「形式を選択して貼り付け」ダイアログボックスの[OK]ボタンをクリック
↓
必要があれば、[形式を選択して貼り付け]機能を使用して、Sheet1の4行目の書式をコピーして、5行目以下に貼り付ける
細かく説明しているため長くなりましたが、実際の作業はあまり面倒なものではないと思います。
それに、Sheet3はそのまま何度でも使いまわす事が出来ますから、2回目以降の作業は、基本的にSheet1の4行目のみの入力と、[コピー]&[形式を選択して貼り付け]で値のみコピーだけとなります。
No.3
- 回答日時:
ここへ質問する前に、マクロの記録を採って勉強しましたか。
煩雑な作業を回答者にやってくれと丸投げしている。マクロに記録で、1単位作業を(=シート2の1行分)マクロの記録を取り、考えること
(1)まず3つのシートを扱う準備
Dim sh1, sh2, sh3
Set sh1 = Worksheets("Sheet1")
・・・
(2)シート1が、4-8行の固定なら何も難しい点が無い。
sh1.Range("A4:C8")
ここの中でシート2の各行の語句で置換。その後シート3に貼り付け
(3)シート2の各行分について単位作業を繰返す
シート2の最終行(=全作業の終わり)は例えば
Sub test01()
d2 = Worksheets("Sheet2").Range("A65536").End(xlUp).Row
' d2=sh2.Range("A65536").End(xlUp).Row (1)を済ませた場合はこれ
MsgBox d2
For i = 2 To d2
'処理
Next i
End Sub
ーーー
(4)置換はマクロ操作で,どういうコードになるか分かる。
青葉区ー>緑区
緑区ー>○○区
のような順次置換になるだろう。
それか、A4:C8を原本部分と考えて、別セル範囲へ毎回コピーし、そこで置換(青葉区固定ーー>XX)して、シート3にコピー貼り付けも良い。
(5)コピー貼り付けは、(Paste方式は避け他方が良いが)
Sub test03()
Set sh1 = Worksheets("Sheet1")
Set sh3 = Worksheets("Sheet3")
'Sheet1置換後(コード略)
d3 = sh3.Range("A65536").End(xlUp).Row+1
sh1.Range("A4:C8").Copy sh3.Cells(d3, "A")
End Sub
順次シート3で下方向に累積していく
各単位作業ごとに、シート3で1行とかあけるのかどうか、質問ではっきりしない。あけるならその手当てをする。d3の+1を調節する。
No.2
- 回答日時:
シート1のB4に
=INDEX(Sheet2!$A:$A,ROW(B5)/5)&""
と記入し,C4にコピー
B4:C4をひたすら下向けにコピー。
A4に
=IF(B4="","","神奈川")
と記入し,ひたすら下向けにコピー。
No.1
- 回答日時:
一例ですが
Sub LCOPY()
Dim RG As Range
X = 4
For Each RG In Worksheets("シート2").RANGE("A1:A1500")
If RG Is Null Then Exit Sub
For i = 1 to 5
Cells(X,1) = "神奈川県"
Cells(X,2) = RG
Cells(X,3) = RG
X = X + 1
Next i
Next RG
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- 政治 岸田内閣は国民を代表しているでしょうか? 11 2022/05/08 05:56
- Excel(エクセル) エクセルのマクロを教えてください。 2 2022/03/28 13:14
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- 政治 岸田首相は、何故、名古屋人を大臣に採用しないのですか? 6 2022/05/09 20:42
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) エクセルの参照について教えてください 1 2022/12/08 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelはなんで先頭の0を消すん...
-
Excel元に戻す方法を教えてくだ...
-
【Microsoft Office Excel Comp...
-
Excelが固まってしまった。
-
西暦や和暦の表示をyyyymmdd表...
-
Excel 2019 のピボットテーブル...
-
【関数】スペースがいくつ入っ...
-
【Excel】セル内の時間帯が特定...
-
excelの不要な行の削除ができな...
-
Excelのオートフィル
-
別シートからの文字を変更
-
Excelのセルを飛ばして入力する
-
Excel初心者です。 詳しい方、...
-
エクセルの行の抽出について質...
-
Excel初心者です。 詳しい方、...
-
【マクロ】エクセルにかいてあ...
-
EXACT関数とIF関数の組み合わせ...
-
スプレッドシート クエリ関数 1...
-
エクセルで指定した日付、店舗...
-
Excelのグラフ軸について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報