というわけでお約束のソース公開
Sub 追加読み込み()
Dim f_name As Variant
Dim ブック, f_path As String
Dim データ行 As Long
f_path = Range("場所").Value 'ディレクトリ名をSheet2の"場所"から取得
ブック = ActiveWorkbook.Name 'ブック名を格納
データ行 = Cells(1).CurrentRegion.Rows.Count '残っているデータ数
ActiveSheet.DrawingObjects.Delete 'すべての図形を消す
With Application
.ScreenUpdating = False '画面更新停止
If Cells(1).Value = "Check" Then
Columns(1).Delete
End If
ChDrive "C" 'Cドライブに移動
ChDir "" & f_path & "" 'ディレクトリを"場所"に移動
'データを読み込む
f_name = Application.GetOpenFilename _
( _
FileFilter:="CSVファイル(*.csv),*.csv" _
, FilterIndex:=1 _
, Title:="複数ファイルオープン" _
, MultiSelect:=True _
)
If IsArray(f_name) Then
'データ追加読み込み処理
For Each g_name In f_name
Workbooks.Open g_name '配列を順に開く
ActiveWorkbook.ActiveSheet.UsedRange.Copy _
Workbooks(ブック).Sheets("Sheet1").Cells(データ行 + 1, 1)
Windows(Dir(g_name)).Close SaveChanges:=False
データ行 = Cells(1).CurrentRegion.Rows.Count 'データを再取得
Next
Else
Exit Sub '複数ファイルの場合キャンセルボタンが押された
End If
For i = データ行 To 3 Step -1 '重複している表題を削除
If Cells(i, 1).Value = "受注番号" Then
Rows(i).Delete
End If
Next
.DisplayFormulaBar = False '視認性向上のため数式バーを非表示
Call チェックボックスを作る
Cells(1).Select
.ScreenUpdating = True '画面更新復帰
End With
End Sub
Sub チェックボックスを作る()
Dim データ行 As Long
Dim 位置 As Range
Dim チェックボックス As Object
データ行 = Cells(1).CurrentRegion.Rows.Count '最下行検出
With Columns(1)
.Insert 'A列にチェックボックス用の
.Offset(, -1).ColumnWidth = 2.63 '列を挿入
End With
With Cells(1)
.Value = "Check"
.Orientation = -90
.Font.Name = "@MS Pゴシック"
End With
With ActiveSheet
For i = 3 To データ行
Set 位置 = .Cells(i, 1) 'チェックボックスの場所をセット
'チェックボックスを作る
Set チェックボックス = .CheckBoxes.Add(位置.Left, _
位置.Top, _
位置.Width, _
位置.Height)
With チェックボックス
.Characters.Text = "" 'チェックボックスの文字をクリア
.Value = xlOff '〃の初期値を「Off」にする
.LinkedCell = 位置.Address 'チェックの有無の参照先をセット
.Display3DShading = True '3D表示にする
End With
位置.Font.ColorIndex = 2 '[True],[False]の文字が見えな
Next 'いように文字色を「白」にする
End With
End Sub
Sub 選択データだけ残す()
Dim データ行, データ列 As Long
Dim 抽出データフラグ As Object
Dim 矢印範囲, データ範囲, 残すデータ As Range
データ行 = Cells(1).CurrentRegion.Rows.Count '最下行検出
データ列 = Cells(1).CurrentRegion.Columns.Count '右端検出
Set 抽出データフラグ = Columns("A:A").Find("TRUE")
Set 残すデータ = Range(Rows(2), Rows(データ行))
With Application
.ScreenUpdating = False '画面更新停止
If 抽出データフラグ Is Nothing Then
MsgBox "出力するデータを指定してください。" 'データの選択を促す
Exit Sub
Else
For i = データ行 To 3 Step -1 '選択データだけを残す
If Not Cells(i, 1).Value = "True" Then
Rows(i).Delete
End If
Next
End If
・
・
・
End Sub
この中でちょっとした工夫をした
For i = データ行 To 3 Step -1 '重複している表題を削除
If Cells(i, 1).Value = "受注番号" Then
Rows(i).Delete
End If
Next
や
For i = データ行 To 3 Step -1 '選択データだけを残す
If Not Cells(i, 1).Value = "True" Then
Rows(i).Delete
End If
Next
の
For i = データ行 To 3 Step -1
の部分。
最下行から該当行を削除するのが味噌。
削除するたびに行数が変わるからです。
以前うまく動かないでほとほと困ったことがあって変数にマウスカーソルを当
てながらステップ実行をしていて気が付いたTIPSです。