【やりたいこと】
連続してない行を複数行選択し、一括で書式を変更したい
【詳細】
画像のようなテンプレートファイルを開き、accessで作成したデータを貼り付け
体裁を整えて別名にして保存するという処理で5ファイルほど同じように作成しています。
画像の4行までが書式のコピー元になる行です。
A列を配列(Arr)に格納し、For~Nextで該当する書式によって
同じ書式にしたい行をunionで配列(FormatCopy)に格納していき
最後に書式を貼り付けするという処理を行っています。
【エラー内容】
1ファイル目は問題なく作成(保存)されますが、2ファイル目の一番最初の
「Set FormatCopy(1) = Union(FormatCopy(1), .Cells(i, "A"))」でエラーになります。
<実行時エラー '1004':
'Union'メソッドは失敗しました。 '_Global'オブジェクト>
イミディエイトウィンドウで各変数を確認すると下記のようになっています。
FormatCopy(1) → A
.Cells(i, "A") → A
また、実行すると
<実行時エラー '1004':
アプリケーション定義またはオブジェクト定義のエラーです。>
【参考にしたURL】
参考にしたURL
findだと遅かったため配列にしました。
Function Change_Format(ByRef xlApp As Excel.Application, ByRef ws As Excel.Worksheet) As Boolean Dim Arr As Variant Dim i As Long Dim FormatCopy(1 To 4) As Variant With ws Arr = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row) For i = 1 To 4 Set FormatCopy(i) = .Cells(i, "A") Next i For i = 7 To UBound(Arr) DoEvents Select Case Arr(i, 1) Case "A" Set FormatCopy(1) = Union(FormatCopy(1), .Cells(i, "A")) Case "B" Set FormatCopy(2) = Union(FormatCopy(2), .Cells(i, "A")) Case "C" Set FormatCopy(3) = Union(FormatCopy(3), .Cells(i, "A")) Case "D" Set FormatCopy(4) = Union(FormatCopy(4), .Cells(i, "A")) End Select Next i '書式を貼り付け For i = 1 To 4 .Rows(i).Copy FormatCopy(i).EntireRow.PasteSpecial (xlPasteFormats) Next i End With End Function
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/27 06:41
2020/07/27 08:19