
' === 他のファイルを順にマージ(Aさん以外) ===
For Each file In files
If file.Path <> baseFile And LCase(fso.GetExtensionName(file.Name)) = "xlsx" Then
Dim matchName As String: matchName = ""
Dim arrNames As Variant: arrNames = ConstNames()
Dim n As Long
For n = LBound(arrNames) To UBound(arrNames)
If InStr(file.Name, arrNames(n)) > 0 Then
matchName = arrNames(n)
Exit For
End If
Next n
' 対象人物が見つからなければスキップ
If matchName = "" Then GoTo SkipFile
Set mergeWorkbook = Workbooks.Open(file.Path)
Set wsOther = mergeWorkbook.Sheets(1)
Dim lastRowOther As Long: lastRowOther = wsOther.Cells(wsOther.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRowOther
' 作業者が一致しない行はスキップ
If InStr(wsOther.Cells(i, 4).Value, matchName) = 0 Then GoTo SkipRow
key = GetRowKey(wsOther, i)
If dictBase.exists(key) Then
' === 既存行:値と書式の更新 ===
Dim rowBase As Long: rowBase = dictBase(key)
Dim col As Long
For col = 5 To 6
If wsBase.Cells(rowBase, col).Value <> wsOther.Cells(i, col).Value Then
wsBase.Cells(rowBase, col).Value = wsOther.Cells(i, col).Value
With wsBase.Cells(rowBase, col)
.Font.Bold = wsOther.Cells(i, col).Font.Bold
.Font.Italic = wsOther.Cells(i, col).Font.Italic
.Font.Color = wsOther.Cells(i, col).Font.Color
.Interior.Color = wsOther.Cells(i, col).Interior.Color
.Font.Size = wsOther.Cells(i, col).Font.Size
.Font.Name = wsOther.Cells(i, col).Font.Name
End With
End If
Next col
Else
' === 新規行:正しい位置に挿入 ===
Dim insertRow As Long
insertRow = FindInsertPosition(wsBase, dictBase, wsOther, i)
wsBase.Rows(insertRow).Insert Shift:=xlDown
wsOther.Rows(i).Copy
wsBase.Rows(insertRow).PasteSpecial Paste:=xlPasteAllUsingSourceTheme
Application.CutCopyMode = False
Dim j As Variant
For Each j In dictBase.Keys
If dictBase(j) >= insertRow Then
dictBase(j) = dictBase(j) + 1
End If
Next j
dictBase.Add key, insertRow
lastRowBase = lastRowBase + 1
End If
SkipRow:
Next i
mergeWorkbook.Close False
SkipFile:
End If
Next
Function ConstNames() As Variant
' 作業者名のリストを定数として返す
ConstNames = Array("Aさん", "Bさん", "Cさん")
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Vba Array関数について教えてください
Visual Basic(VBA)
-
エクセルの改行について
Visual Basic(VBA)
-
エクセルで同じブックを開くについて
Excel(エクセル)
-
-
4
vbsでのwebフォームへの入力制限?
Visual Basic(VBA)
-
5
9月17日でサービス終了らしいのですが、今までのようなエクセルの質問や相談はどこですればいい?
Excel(エクセル)
-
6
【マクロ】変数に入れるコードを少しでも短くする為には?
Excel(エクセル)
-
7
LibreOffice Clalc(またはエクセル)において日祝日の場合に1を返すプログラムは?
Excel(エクセル)
-
8
マクロ セルを右クリックした時のメニューバーの追加と同様に画像を右クリックしたときのメニューバーにコ
Excel(エクセル)
-
9
【マクロ】シートの変数へ入れるコードがエラーとなるのはなぜでしょうか?
Visual Basic(VBA)
-
10
グループごとの個数をカウントしたい。
Excel(エクセル)
-
11
EXCELのVBAで複数のシートを追加したいが1つしかできない
Excel(エクセル)
-
12
ユーザーマクロ作成
Excel(エクセル)
-
13
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
14
システムファイルについて
Excel(エクセル)
-
15
算術演算子「¥」の意味について
Visual Basic(VBA)
-
16
VBAの「To」という語句について
Visual Basic(VBA)
-
17
ダブルクリックで貼り付けた画像からリンクのみ削除し、画像を残したい。
Visual Basic(VBA)
-
18
Vba FileSystemObject オブジェクトに使って拡張子、BaseNameを取り出す
Visual Basic(VBA)
-
19
VBAの質問(Msgboxについて)です
Visual Basic(VBA)
-
20
【マクロ】モジュール変数の記述時、Callにて、呼び出されたプロシージャから実行するとエラーとなる?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
仕事において、「(ある作業を)...
-
製造業におけるSV派遣てどうい...
-
実作業はどんな意味ですか?
-
鉄粉、粉塵について
-
一人残業または一人休日出勤っ...
-
「TT」とはどういう意味でしょ...
-
建設工事 土日祝 時間 法律
-
承認者が照査を兼ねていたら照...
-
VectorWorks の作業画面の取り...
-
エクセルVBAのIFを使ったコピペ
-
工場の製造現場で時計は必要か
-
照明器具交換 活線作業について
-
希硫酸の取扱について
-
ある動作が「ひとまず終わった...
-
土木積算「潮間作業」について
-
建設現場の現場監督をしている...
-
重労働
-
作業をしながら数を数え続ける...
-
特殊土木作業員ってなんですか?
-
ネットワーク工程表(1級管工事...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
仕事において、「(ある作業を)...
-
製造業におけるSV派遣てどうい...
-
急には変わらないけど
-
照明器具交換 活線作業について
-
言うことを聞かない利用者さんには
-
作業をしながら数を数え続ける...
-
作業用の踏み台
-
一人残業または一人休日出勤っ...
-
鉄粉、粉塵について
-
パソコン作業で、目が疲れると...
-
ある動作が「ひとまず終わった...
-
「TT」とはどういう意味でしょ...
-
実作業はどんな意味ですか?
-
合帳(あいちょう)とは言わな...
-
「作業の指示、ありがとうござ...
-
特殊土木作業員ってなんですか?
-
複数のExcelファイルをマージす...
-
B型作業所について
-
承認者が照査を兼ねていたら照...
-
詳細の分からない工事
おすすめ情報