アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel2010使用者、VBA初心者です。

複数のファイルを1つのエクセルに統合するマクロをネット上で見つけたのでそれを活用しているのですが、空白セルの一部が長さ0の文字列のまま残ってしまうため、一気にNullに変換したいと思っています。ネットで色々と調べてコードを追加してみたのですが、どうしても上手くいきません。

下記のコードに何を追加すれば最後に一気に空白をNullにできるでしょうか?ご教授頂けると助かります。どうぞよろしくお願い致します。

Sub ExcelbookCombine()
'結合したいファイルがあるフォルダの場所 cドライブなら "C:\test\"
Const Fol As String = "C:\test\"
Dim Fn
Dim NewFile As Workbook
Dim Wb As Workbook
Dim Ws1 As Worksheet
Dim Ws2 As Worksheet
Dim R As Range
Set NewFile = Workbooks.Add
Set Ws1 = NewFile.Worksheets(1)
Set R = Ws1.Range("A2")
Fn = Dir(Fol, vbNormal)
Do Until Fn = ""
Set Wb = Workbooks.Open(Fol & Fn)
'ワークシート1をコピーする場合は Wb.Worksheets(1)
'ワークシート2をコピーする場合は Wb.Worksheets(2)
Set Ws2 = Wb.Worksheets(1)
'Aの1行目から8列目までをコピーして結合する
Ws2.Range("A2", Ws2.Cells(Rows.Count, 1).End(xlUp)).Resize(, 22).Copy R

Set R = R.End(xlDown).Offset(1)
Application.CutCopyMode = False
Wb.Close
'Debug.Print Fn
Fn = Dir
Loop
Set R = Nothing
Set Ws1 = Nothing: Set Ws2 = Nothing
Set Wb = Nothing: Set NewFile = Nothing
End Sub

↑このコードできちんとエクセルは統合できています。

A 回答 (1件)

こんばんは。



まず、失礼ですが、用語で、「統合(Consolidate)」というのは、Excelのメソッドのひとつですから、今回は、単に、データが合わさっただけのようですね。
それと、Null というのは、VBAでは、Null値といって、Variant型に入れる特別な値のことで、ワークシートで、Nullという言葉は使われているようですが、VBA側からは、単にEmptyのことを言うようです。(いわゆる完全な空の状態)

>空白セルの一部が長さ0の文字列のまま残ってしまうため、一気にNullに変換したいと思っています。

長さ0の文字列を取るための方法は、範囲をClearContents で行うか、
細かい選別をする場合は、
範囲.SpecailCells(xlCellTypeConstants,xlTextValues) を使い、その個々のセルの内容をループして、Len 等で調べてClearContents を使うか、

With 範囲
 .Value = .Value
End With

とすれば、長さ0の文字列は消えます。
試してみてください。ダメだったら、もう少し詳しい情報が必要になるかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A