資産管理のため、次のような作業を行いたいのですが、
勉強が足りず困っております。
あまえた質問で申し訳ないのですが、どうぞお知恵を貸してください。
下のようなExcelファイル(約3000行15列のもの)を
場所 資産番号 資産の種類 使用者 購入日・・・
本社 123456 AA 東京太郎 2001/4/4
大阪 123457 BB 大阪花子 2003/1/10
福岡 123458 AA 福岡一郎 2005/3/10
京都 123459 CC 京都次郎 2006/8/1
場所ごとに分割して「場所」名のファイルを作成したいと思い、
過去の記事を探して、ここへたどり着きました。
http://oshiete.goo.ne.jp/qa/4361389.html
早速、mitarashiさんのマクロを使用し、ファイルの分割はできたのですが、
3列目までしか記載されておらず(これは当然のことだと思うのですが)
どこを変えればいいか、試行錯誤したのですがエラーになってしまいます。
残りの列の値も出力させるには、どうしたらよいでしょうか。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
私は、質問者が参考にしたいというコードはFSO(Googleで参照)を含んでいて、初心者には難しすぎるのではないかと思う。
其れでソート法を提案する。
XXXX..aブックのSheet3で
場所列でソートする。すると
データ例
場所資産番号資産の種類使用者購入日
本社123456AA東京太郎2001/4/4
本社123457AA1東京次朗2001/4/5
本社123458AA2東京三郎2001/4/6
本社123459AA3東京四郎2001/4/7
本社123460AA4東京五朗2001/4/8
大阪123457BB大阪花子2003/1/10
大阪123457BB1大阪菊子2003/1/11
大阪123457BB2大阪桃子2003/1/12
大阪123457BB3大阪華子2003/1/13
大阪123457BB4大阪梨子2003/1/14
福岡123458AA福岡一郎2005/3/10
福岡123458AAC福岡鳥郎2005/3/11
福岡123458AAC福岡川郎2005/3/12
福岡123458AAC福岡夏郎2005/3/13
京都123459CC 京都次郎 2006/8/1
京都123459CC1京都権二郎 2006/8/2
京都123459CC2京都茂郎 2006/8/3
京都123459CC3京都次郎 2006/8/4
コード
標準モジュールに
Sub Macro3()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim midasi
Set sh1 = Workbooks("xxxx.xls").Worksheets("Sheet3")
d = sh1.Range("a65536").End(xlUp).Row
MsgBox d
r = sh1.Range("IV2").End(xlToLeft).Column
MsgBox r
midasi = sh1.Range(sh1.Cells(1, "A"), Cells(1, r))
'--初期設定
mae = sh1.Cells(2, "A") '最初データ行の場所
hajime = 2 '第2行
basho = sh1.Cells(2, "A") '最初の場所
'--最終行までくり返し
For i = 3 To d
If sh1.Cells(i, "A") = mae Then '直前行と場所が変わったか
Else
owari = i - 1
'---
Workbooks.Add.Activate '新規ブックを開く
Set sh2 = ActiveWorkbook.Worksheets("Sheet1")
sh2.Range(sh2.Cells(1, "A"), sh2.Cells(1, r)) = midasi
sh1.Range(sh1.Cells(hajime, 1), sh1.Cells(owari, r)).Copy sh2.Range("A2")
MsgBox basho
ActiveWorkbook.SaveAs basho & ".xls"
ActiveWorkbook.Close
'---初期設定入れ替え
mae = sh1.Cells(i, "A")
hajime = i
basho = sh1.Cells(i, "A")
End If
Next i
'--最後の場所の処理
owari = i - 1
Workbooks.Add.Activate '新規ブックを開く
Set sh2 = ActiveWorkbook.Worksheets("Sheet1")
sh2.Range(sh2.Cells(1, "A"), sh2.Cells(1, r)) = midasi
sh1.Range(sh1.Cells(hajime, 1), sh1.Cells(owari, r)).Copy ActiveWorkbook.Worksheets("sheet1").Range("A2")
MsgBox basho
ActiveWorkbook.SaveAs basho & ".xls"
ActiveWorkbook.Close
End Sub
結果
例えば「京都.xls」ブックのSheet1は
場所資産番号資産の種類使用者購入日
京都123459CC 京都次郎 2006/8/1
京都123459CC1京都権二郎 2006/8/2
京都123459CC2京都茂郎 2006/8/3
京都123459CC3京都次郎 2006/8/
No.2
- 回答日時:
書いた方を差し置いて書くのは僭越ですが、mitarashiさんの書いたコードを尊重すると、
col = sourceRange.Columns.Count '※
と、列を取れば、自動的に取れますが、定数で、列数を入れても以下のようにしても可能です。
col = 5
VBAとして、ベテランの人のコードだと思います。(こういう言い方は、返って失礼かもしれませんが。)
'//
Sub testR()
Dim sourceRange As Range
Dim targetRange As Range
Dim fieldNameRange As Range
Dim myDic As Object
Dim i As Long, j As Long
Dim myKey As Variant
Dim col As Long '※
Set sourceRange = ActiveSheet.Range("A1").CurrentRegion
Set fieldNameRange = sourceRange.Rows(1)
col = sourceRange.Columns.Count '※
Set sourceRange = sourceRange.Offset(1, 0).Resize(sourceRange.Rows.Count - 1, col) ''※
Set myDic = CreateObject("Scripting.Dictionary")
For i = 1 To sourceRange.Rows.Count
Set targetRange = sourceRange.Cells(i, 1)
With targetRange
If Not myDic.exists(.Value) Then
myDic.Add .Value, targetRange.Resize(1, col) '※
Else
Set myDic.Item(.Value) = Union(myDic.Item(.Value), targetRange.Resize(1, col)) '※
End If
End With
Next i
'--省略---
No.1
- 回答日時:
A1セルに「場所」と書いてあってA2(2行目)以下から実データが並んでいるとして。
たとえばこんな具合に。
Sub sample()
Dim s0 As Worksheet
Dim h
Worksheets("元になるリストのシート名").Copy before:=Worksheets(1)
Set s0 = Worksheets(1)
Do Until Application.CountA(s0.Range("A:A")) < 2
h = s0.Range("A2").Value
s0.Range("A1").AutoFilter field:=1, Criteria1:=h
With Worksheets.Add
s0.AutoFilter.Range.Copy Destination:=.Range("A1")
.Name = h
.Move
ActiveWorkbook.SaveAs Filename:="C:\保存先フォルダ名\" & h & ".xls"
ActiveWorkbook.Close False
s0.AutoFilter.Range.Offset(1).Delete shift:=xlShiftUp
End With
Loop
Application.DisplayAlerts = False
s0.Delete
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Visual Basic(VBA) tatsumaru77様 昨日回答して頂いたものです。 すみませんが、昨日の質問で1つ補足があります 1 2022/05/15 15:06
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- その他(Microsoft Office) EXCELの1行を1枚の用紙にそれぞれ印刷したい。 3 2022/10/10 11:35
- Excel(エクセル) Excel使用前提 同じフォルダ内にあるファイルの集約等をマクロでできますか 4 2022/09/06 19:03
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- PDF PDFファイルを分割するマクロの作り方を教えてください。 2 2022/06/24 11:09
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/10 09:06
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで、漢字のみ抽出する式を...
-
1丁は何メートルになるのでし...
-
「洛西」は「らくせい」ですか...
-
「~してはる」は敬語?それと...
-
「来来亭」と「魅力屋」の関係は?
-
漢字の意味で、「町」「街」「...
-
私は滋賀県が嫌いです。 絶対に...
-
広島市と神戸市は都市規模は変...
-
「じゃろ」と最後に付くのはど...
-
京都のお土産を神奈川県(町田含...
-
暇な人話しませんか?
-
奈良で一番の繁華街
-
『教えてたもれ』とは、どこの...
-
「のや」「んや」って言う関西弁
-
ホテル佐野家
-
「どやさっ」って何弁ですか?
-
東日本から西日本へ旅行した場...
-
橋の端を何故「詰」というの?
-
仕事を終える=「おく」という...
-
近畿(京都)から18きっぷで日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで、漢字のみ抽出する式を...
-
漢字の意味で、「町」「街」「...
-
「~してはる」は敬語?それと...
-
「どやさっ」って何弁ですか?
-
「洛西」は「らくせい」ですか...
-
京都のいしちょうは本当に幽霊...
-
私は滋賀県が嫌いです。 絶対に...
-
大阪市は名古屋の何倍くらい都...
-
1丁は何メートルになるのでし...
-
奈良で一番の繁華街
-
「来来亭」と「魅力屋」の関係は?
-
阪急電車→京都駅への行き方教え...
-
『教えてたもれ』とは、どこの...
-
東日本から西日本へ旅行した場...
-
ホテル佐野家
-
友達から わたしのこと嫌い?っ...
-
「のや」「んや」って言う関西弁
-
「そうやろ?」って博多弁です...
-
「じゃろ」と最後に付くのはど...
-
関西弁ネイティブの方!尊敬の...
おすすめ情報