[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『同じフォルダ内にあるブックのシートを集計シートに値で転記するには』(きり)
複数のシートを串刺し計算したいのですが、転記元のブック内の数値が文字列で計算出来ません。
また、転記元のブックは1ヶ月×2種類で62、支店の数が24店あるので困っています。
現状↓
フォルダ内に複数のExcel(1.xlsx〜31.xlsx)と、(商品別1.xlsx〜商品別31.xlsx)と、月別集計.xlmsがあります。それぞれのExcelは数値が文字列となっています。
月別集計.xlmsには、“月別集計”、“1〜31”と”商品別1〜31”のシートがあり、同じ名前のシートにそれぞれ値で貼りたいです。
シートを新たに増やして貼り付けのやり方はみつけたのですが、“月別集計”シートに関数を入れているので、ブック名と同じ名前のシートに貼り付けたいのですが、見つかりませんでした。
文字列の範囲を選んで数値に変換するのも時間がかかるので、どなたかVBAでの方法を
ご教授お願いします。
下記のものは他で見つけたのですが、貼り付けは出来たのですが、文字列のままでした。
Option Explicit
'
Sub Macro1()
Dim FileName As String ' FileName = Dir(ThisWorkbook.Path & "\*.xlsx") Application.ScreenUpdating = False ' Do While FileName > "" Workbooks.Open ThisWorkbook.Path & "\" & FileName, False, True FileName = Replace(FileName, ".xlsx", "") Cells.Copy ThisWorkbook.Sheets(FileName).[A1] ActiveWorkbook.Close False FileName = Dir Loop End Sub
あちこち調べてみて試したのですが、エラーばかり出てしまい困っています。
どのように組み込めば良いのか、どなたか教えてください。よろしくお願いいたします。
< 使用 Excel:Excel2021、使用 OS:Windows10 >
■2
>それぞれのExcelは数値が文字列となっています。
>貼り付けは出来たのですが、文字列のままでした。
元データが【文字列】ですから、マクロは正しく動作してますよね。
元データの【文字列】がどういうものを指しているかわかりませんが、たとえば、valueプロパティを直接参照して転機してみては如何でしょうか。
■3
部分的に指摘があるところですが、対象のシートは明示的にされた方がよいとおもいます。
Cells.Copy ↓のように解釈されている ActiveSheet.Cells.Copy
さらに、「ActiveSheet.Cells」だと全セルが対象になりますから、UsedRangeに限定したほうがよいようにおもいます。
(データ次第かもですが)
■4
>あちこち調べてみて試したのですが、エラーばかり出てしまい困っています。
具体的にコードを示して、エラー内容(発生箇所、エラー番号、エラーメッセージ)を提示頂ければ、アドバイスできることがあるかもしれません。
(もこな2) 2023/04/14(金) 08:56:15
転機 → 転記
(もこな2) 2023/04/14(金) 09:03:54
Sub Macro1_改() Dim FileName As String srcRNG As Range
FileName = Dir(ThisWorkbook.Path & "\*.xlsx") Do While FileName > "" With Workbooks.Open(ThisWorkbook.Path & "\" & FileName, False, True) Set srcRNG = .Worksheets(1).UsedRange ThisWorkbook.Worksheets(Replace(.Name, ".xlsx", "")).Range(srcRNG.Address).Value = srcRNG.Value .Close False FileName = Dir() End With Loop End Sub
(もこな2) 2023/04/15(土) 09:16:53
コメントありがとうございます。
連日睡眠不足と昨日は営業と会議があり、夜はあっさり落ちておりました。
本日も所用で見れていませんでした。
申し訳ございません。
コードの内容は、なんとなくですが分かっているつもりです。
試しに1〜5.xlsxを.csvで保存し直して(コード内の.
xlsxも.csvに変更)貼り付けしたら集計はされました。
集計したい範囲はそれぞれcellのB4:R90です。
範囲を明確にした方が良いのですね。
ありがとうございます。
(きり) 2023/04/15(土) 21:18:39
コードありがとうございました。
コンパイルエラーとなったので2行目の頭にDimをつけました。
月別集計シートのUsedRangeを取得して、取得範囲を明確化できるんですね。
cellを配列や番地で指定するしかできないと思ってました。
現在1〜12までの xlsxしかなく、実行時エラー9となってしまいました。
月別集計.xlsmにシートが1ヶ月分用意されているからでしょうか。
(きり) 2023/04/15(土) 23:38:15
■6
>cellを配列や番地で指定するしかできないと思ってました。
ちょっと仰ってる意味がわかりません。
少なくとも提示されたコードは【(アクティブシートの)全セル】を指定してますよ。
>集計したい範囲はそれぞれcellのB4:R90です
>範囲を明確にした方が良いのですね。
どのように理解したのか不明ですが、論点は集計したい範囲ではなく【集計シートに転記したい範囲】です。
なので、各ブックの1番目のシートの「B4:R90」を転記したいのであれば、【(アクティブシートの)全セル】なんて指定をする必要ないですよね。
■7
>現在1〜12までの xlsxしかなく、実行時エラー9となってしまいました。
>月別集計.xlsmにシートが1ヶ月分用意されているからでしょうか。
こちらの疑問点もよくわかりません。↓の意味は理解できてますか?
ThisWorkbook.Worksheets(Replace(.Name, ".xlsx", "")) ~~~~~~~~~~~~~~~~~~~~~~~~~~
なお、数字だけのブック名があるようなので、念のため↓に修正してください。
ThisWorkbook.Worksheets(Replace(.Name, ".xlsx", ""))〜〜 ↓ ThisWorkbook.Worksheets(Replace(.Name, ".xlsx", "") & "")〜〜
■8
>試しに1〜5.xlsxを.csvで保存し直して(コード内の.xlsxも.csvに変更)貼り付けしたら集計はされました。
いきなり別アプローチをぶっこまれましたが、そちらで行くなら、それはそれで効率的なアプローチがあるように思います。
現状のコードを示したうえで、疑問点など(詰まっているところ)仕切り直しをされてはどうでしょうか?
■9
上記に関連しますが、元データの【文字列】がどういうものを指しているかわかりませんので、元のアプローチで行くなら、セルの値がどうなっているのか説明してください。
(別アプローチのほうで進めるなら無駄な議論になりそうなのでとりあえず不要です)
(もこな2) 2023/04/18(火) 07:22:06
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.