
大変お世話になっております。
以下のVBAを実行すると、セルの書式設定で『文字列』のセル(例えば、052等、数字の頭が0のため文字列にしたセル)が反映されません…。
(複数のシートを1つのシートにまとめるVBAでして、まとめる前の元のシートに文字列が含まれています)
文字列を反映したいため、コードの修正をしていただけると有難い限りです…。
お手数ですが、コードの全文をご記載いただけると本当に助かります…。
Sub 複数のシートを1つのシートにまとめる()
Dim i As Long
Dim r As Long
Dim s As Long
Dim Sh As Worksheet
Dim MaxRow As Long
Dim MaxCol As Long
Dim MyArray As Variant
Dim JoinSh As Worksheet
Application.DisplayAlerts = False 'シート削除時のアラート停止
For Each Sh In Worksheets
If InStr(Sh.Name, "統合") <> 0 Then Sh.Delete 'すでに統合シートが存在する場合は一旦削除
Next
Application.DisplayAlerts = True 'シート削除時のアラート停止を解除
s = 1 '最大行を超えた場合次の統合シートを作成するための番号
Worksheets.Add Before:=Worksheets(s) '新規に統合シートを追加
ActiveSheet.Name = "統合"
Set JoinSh = ActiveSheet '統合シートを変数に格納
For i = s + 1 To Worksheets.Count 'シートを統合シートの次~末尾までループ
With Worksheets(i) '各月シート
If i = 2 Then
r = 1 '最初だけ項目も取得
Else
r = 2 '最初以外は2行目から取得
End If
MaxRow = .Cells(Rows.Count, 1).End(xlUp).Row '1列目で最終行を取得
MaxCol = .Cells(1, Columns.Count).End(xlToLeft).Column '1行目で最終列を取得
MyArray = Range(.Cells(r, 1), .Cells(MaxRow, MaxCol)) 'A1~データ末尾まで配列に格納
End With
With JoinSh '統合シート
MaxRow = .Cells(Rows.Count, 1).End(xlUp).Row '統合シートの1列目で最終行取得
If MaxRow + UBound(MyArray) > Rows.Count Then '最大行を超える場合の処理
s = s + 1 '統合シートの番号を加算
Worksheets.Add Before:=Worksheets(s) '新規に統合シートを追加
ActiveSheet.Name = "統合" & s '名前が同じにならないように番号を追加
Set JoinSh = ActiveSheet '統合シートを変数に格納
MaxRow = JoinSh.Cells(Rows.Count, 1).End(xlUp).Row '統合シートの1列目で最終行取得
End If
If .Cells(1, 1) = "" Then
'最初だけ1行目から貼り付け
Range(.Cells(1, 1), .Cells(UBound(MyArray), MaxCol)) = MyArray
Else
'最初以外は最終行の次に貼り付け
Range(.Cells(MaxRow + 1, 1), .Cells(MaxRow + UBound(MyArray), MaxCol)) = MyArray
End If
End With
Next i
End Sub
ご回答を心よりお待ちしております。
大変恐縮ですが、どうぞ宜しくお願い申し上げます。
No.2ベストアンサー
- 回答日時:
以下のようにしてください。
但し、最大行(Rows.count)を超えた場合の対応はしていません。
当方の環境(excel2019)では、Rows.count=1,048,576なので約100万行になります。最大行を超えることはないと考えています。
あなたの環境が非常に古いexcelの場合は問題があるかもしれません。
Sub 複数のシートを1つのシートにまとめる()
Dim i As Long
Dim r As Long
Dim s As Long
Dim Sh As Worksheet
Dim MaxRow As Long
Dim MaxCol As Long
Dim JoinSh As Worksheet
Dim NextRowJ As Long
Application.DisplayAlerts = False 'シート削除時のアラート停止
For Each Sh In Worksheets
If InStr(Sh.Name, "統合") <> 0 Then Sh.Delete 'すでに統合シートが存在する場合は一旦削除
Next
Application.DisplayAlerts = True 'シート削除時のアラート停止を解除
s = 1 '最大行を超えた場合次の統合シートを作成するための番号
Worksheets.Add Before:=Worksheets(s) '新規に統合シートを追加
ActiveSheet.Name = "統合"
Set JoinSh = ActiveSheet '統合シートを変数に格納
For i = s + 1 To Worksheets.Count 'シートを統合シートの次~末尾までループ
With Worksheets(i) '各月シート
If i = 2 Then
r = 1 '最初だけ項目も取得
NextRowJ = 1
Else
r = 2 '最初以外は2行目から取得
NextRowJ = JoinSh.Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
MaxRow = .Cells(Rows.Count, 1).End(xlUp).Row '1列目で最終行を取得
MaxCol = .Cells(1, Columns.Count).End(xlToLeft).Column '1行目で最終列を取得
.Range(.Cells(r, 1), .Cells(MaxRow, MaxCol)).Copy Destination:=JoinSh.Range("A" & NextRowJ)
End With
Next i
End Sub
tatsumaru77 様!
お忙しい中、ご回答をしていただきまして本当に有難うございました…!
問題のあった文字列のセルが、見事に反映されました…!
心より感謝申し上げます…!
他にも検討が必要なコードがあるため、また質問をさせていただくと思います…。
その際にもどうか宜しくお願い申し上げます…!
この度は助けていただきまして、本当に有難うございました!
深く感謝申し上げます…!
大変恐縮ですが、次回以降もどうぞ宜しくお願い申し上げます…!!
No.1
- 回答日時:
残念ですが、ここは作業依頼をする場所ではありません。
自力で解決するためのアドバイスを貰う場所です。
(´・ω・`) ごめんね。
作業依頼をするのであれば、有料サイトでお金を払って作業委託するようにしましょう。
・・・解決に至る回答を貰える質問をするためのアドバイス・・・
そんなわけですので、そのコードの何が分からないのかを具体的に質問すると、理解に役立つアドバイスを貰えると思います。
例:「文字列を切り出しているところがどこなのか分からないので教えてください」
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA マクロ あるフォルダー内の複数のファイルを統合したいです 1 2024/02/19 21:37
- Visual Basic(VBA) VBAコードが作動しません。修正したいのですが何処に原因かあるか教えて下さい。 1 2024/01/08 16:23
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) Excel VBA マクロ シート名を変えずにA列にあるセル名の名前でファイルの分割をしたいです 3 2024/02/05 22:10
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのVBAのマクロで他のシー...
-
特定の文字を含むシートだけマ...
-
VBAでオブジェクト変数にsetし...
-
エクセルで通し番号を入れてチ...
-
excelのマクロで該当処理できな...
-
シートが保護されている状態で...
-
Excelマクロのエラーを解決した...
-
実行時エラー1004「Select メソ...
-
VBAで列から数字を判別する...
-
VBA 検索して一致したセル...
-
VBAで数式の入ったシートコピー...
-
コード名シートA列と集計シート...
-
実行時エラー'1004': WorkSheet...
-
【VBA】指定した検索条件に一致...
-
セル値の変更でマクロを実行
-
エクセルVBA ListBoxの並び...
-
ユーザーフォームに入力したデ...
-
IFステートの中にWithステート...
-
ExcelのVBAでのグラフ操作について
-
EXCEL VBAで複数シートから該当...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
【VBA】特定の文字で改行(次の...
-
ExcelのVBAのマクロで他のシー...
-
Worksheet_Changeの内容を標準...
-
EXCELVBAを使ってシートを一定...
おすすめ情報