![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
元データ
場所 | 保育所 |
項目ID| B501 | B502 |
年 | 2002| 2003 | 2002| 2003|
松戸市| 35 | 54 | 35 | 54 |
船橋市| 21 | 35 | 21 | 35 |
市川市| 15 | 23 | 15 | 23 |
更新用データ
場所 |保育所|
項目ID| B501 |
年 | 2004 |
松戸市| 25 |
船橋市| 45 |
市川市| 31 |
更新した後の表示
場所 | 保育所 |
項目ID| B501 | B502 |
年 | 2002 | 2003 | 2004 | 2002 | 2003 |
松戸市| 35 | 54 | 25 | 10 | 50 |
船橋市| 21 | 35 | 45 | 20 | 16 |
市川市| 15 | 23 | 31 | 25 | 23 |
見づらくて申し訳ないです。
上の表みたいなデータの更新をしたくて
まず項目IDの列をB501で検索かけて見つかったら空白の行を挿入してと
考えていたのですがセルが結合していたりと
全然思ったように動きません。
どのように記述すればよいか教えていただけないでしょうか。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
> まず項目IDの列をB501で検索かけて見つかったら
で、ここまではできていて、B501 が入力されている結合されたセルが選択されていると
します。
この選択されている結合セルの「1つ右で1つ下のセル」を選択して列挿入等の処理を
行なえばよいのではないでしょうか。
Selection.Offset(1, 1).Select
Selection.EntireColumn.Insert
Range(Selection.Offset(-1, 0), Selection.Offset(-1, -1)).Merge
あとは、この時点で選択されているセル以下に「更新用データ」を落とし込みます。
アドバイスありがとうございました。
まだ完全には動かないんですけど
上記のように処理をさせたら
以前よりは理想に近づいてきたので
もう少し頑張ってみます
No.2
- 回答日時:
Sub test01()
'---シート設定
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
Set sh3 = Worksheets("Sheet3")
'Rows(3).EntireRow.Insert
'---Sh1の第3行目マージセルを第4行に分解
For j = 2 To 10
'MsgBox Cells(3, j)
If sh1.Cells(3, j).MergeCells = True Then
If sh1.Cells(3, j) = "" Then
sh1.Cells(4, j) = m
Else
m = sh1.Cells(3, j)
sh1.Cells(4, j) = m
End If
End If
Next j
'---右端列の取得
c1 = sh1.Range("iv5").End(xlToLeft).Column
c2 = sh2.Range("iv4").End(xlToLeft).Column
'--初期列の設定
x = 2: y = 2: z = 2
'---列マージ
agn:
'---マージ用キーの設定
k1 = Trim(sh1.Cells(4, x)) & Trim(sh1.Cells(5, x))
k2 = Trim(sh2.Cells(3, y)) & Trim(sh2.Cells(4, y))
'MsgBox k1 & " " & k2
'---キー比較
If k1 > k2 Then GoTo high
If k1 = k2 Then GoTo eql
If k1 < k2 Then GoTo low
'---第1キー>第2キー
high:
For i = 3 To 8
sh3.Cells(i + 1, z) = sh2.Cells(i, y)
Next i
y = y + 1
If y > c2 Then
sh2.Cells(3, y) = "Z999"
sh2.Cells(4, y) = "'9999"
End If
z = z + 1
GoTo agn
'-----第1キー=第2キー
eql:
If k1 = "Z9999999" Then GoTo owari
For i = 2 To 7
sh3.Cells(i + 1, z) = sh2.Cells(i, y)
Next i
x = x + 1
If x > c1 Then
sh1.Cells(4, x) = "Z999"
sh1.Cells(5, x) = "'9999"
End If
y = y + 1
If y > c2 Then
sh2.Cells(3, y) = "Z999"
sh2.Cells(4, y) = "'9999"
End If
z = z + 1
GoTo agn
'----第1キー<第2キー
low:
For i = 3 To 8
sh3.Cells(i, z) = sh1.Cells(i, x)
Next i
x = x + 1
If x > c1 Then
sh1.Cells(4, x) = "Z999"
sh1.Cells(5, x) = "'9999"
End If
z = z + 1
GoTo agn
'----終了
owari:
'--作業的余分なもの消去
sh1.Cells(4, c1 + 1) = ""
sh1.Cells(5, c1 + 1) = ""
sh2.Cells(3, c2 + 1) = ""
sh2.Cells(4, c2 + 1) = ""
End Sub
データ例
Sheet1は
元データ
場所 保育所
項目IDB501 B502
B501 B501 B502B502
年 2002200320022003
松戸市35543554
船橋市21352135
市川市15231523
(注)第4行目は人手で行挿入しておいて実行します。上記は、結果です。
Sheet2
更新用データ
場所 保育所
項目ID B501 B502
年 20042004
松戸市25325
船橋市45345
市川市31331
結果 Sheet3(実質B3:G8)
B501 B502
B501 B501 B501 B502B502 B502
200220032004200220032004
3554253554325
2135452135345
1523311523331
(注記)
人の組んだプログラムを読解するのは難しいものですがよろしく。
Sheet3の見出し文字列のセットは、プログラムが長くなるので省略してます。手作業でSheet3に入れるか、プログラムで代入文を加えてください。
項目IDと年は文字列で統一し、前後とも余分なスペースが混じらないように考えてください。そうしないと、制御が崩れ、結果がむちゃくちゃになります。
Sheet3のセルのマージはできていません。とりあえず見切りで上げます。
上記は定番のマージのロジックを使ってます。
まだ完全には理解できていないのですが
こういった方法でも処理する方法があるということを
学べましたので少しだけ賢くなったような気がします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- 関東 【千葉県から横浜、川崎への通勤について】 結婚を見据えて彼女との同棲を考えております。 私は横浜駅、 4 2022/11/20 21:56
- 電車・路線・地下鉄 東京メトロ東西線は一部区間を廃止するべきでは? 7 2022/08/22 16:29
- 関東 ※東北の人からのにわか質問で不快に来たりムカついたらすいません、悪気はありません。 東京方面に住む人 8 2022/08/03 18:17
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) ExcelのVLOOKUP関数 7 2022/08/23 06:46
- 環境学・エコロジー 井戸水の水質の質問。 水質検査で窒素の項目で飲料不可と判定されました。 窒素の項目は硝酸アンモニウム 3 2022/09/17 12:05
- 政治 維新が尼崎市長選で勝てなかったのは、維新の鈴木宗男や橋下徹らがゼレンスキーを批判したからですよね? 5 2022/11/21 15:35
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA インデックスの境...
-
VBAで複雑な構成の転記
-
Excel で行を指定回数だけコピ...
-
【エクセル】 連続印刷する際の...
-
excelの差込印刷で可視セルだけ...
-
VBAで作成する勤務表の合計を求...
-
A列で同じ日付をグループ化し、...
-
VBA ブック1からブック2へ行...
-
Excelでデータの抽出&別シート...
-
AQUOS 602SH
-
エクセル 2つの表比較
-
シャープのアクオス sh-m25 を...
-
EXCELマクロで全シート対...
-
エクセルVBA 別シートの複数の...
-
Excel VBAでシート内全体に非表...
-
スマホ機種変更で旧機種のGoogl...
-
J-N51から911SHに機種変更・・...
-
SDカードからminiSDカードへ移す
-
PC修理の値段と技術について
-
FOMAカード(UIM)異常
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel で行を指定回数だけコピ...
-
エクセルVBA 別シートの複数の...
-
excelの差込印刷で可視セルだけ...
-
Excel VBA インデックスの境...
-
シャープのアクオス sh-m25 を...
-
VBA:同じ文字列データの比...
-
エクセル:VBAで月変わりで、自...
-
VBA別シートの最終行の下行へ貼...
-
エクセルVBAで 2種のリストを...
-
エクセルVBAで SendKeys "{TAB}"
-
VBAで条件が一致する行のデータ...
-
Excel VBAでシート内全体に非表...
-
歯抜けの時間を埋めて行の挿入
-
Excelマクロ データが上書きさ...
-
VBA 貼付先範囲(行)がいっぱ...
-
【WORD差し込み印刷】複数レコ...
-
EXCELマクロで全シート対...
-
エクセルVBAでの日付順のデ...
-
エクセル シート保護後コメン...
-
ノートパソコン 2in1について i...
おすすめ情報