- ベストアンサー
エクセルのファイルをA列に入っている名前ごとに保存
こんにちは、 今学生に渡すファイルを作っているのですが 明日の夕方までに5000人近い学生のファイルを作らなければならないのです(>_<) 過去の質問も見たのですが、該当の質問が見つからなかったので質問させていただきます。 ファイルは35000行あり A列 B列 C列 山田 機械関係 埼玉県 山田 車関係 千葉県 鈴木 機械関係 埼玉県 山田 機械関係 埼玉県 というデータで並んでます。 A列の山田・鈴木ごとのファイルを作りたいのです。 マクロで自動の分割と 自動の保存はそれぞれできたのですが うまくつながらないのです。 自動で5000人のファイルを作ることが不可能なのでしたら ボタンを押したら「山田.xls」のファイルが出来るという 5000回ボタンを押すアナログ方式でもいいのですが。。。。 もし少しでもアドバイスいただけたらな~と思っております(T_T) では宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
深く考えていません。山田さんのデータを、Tab区切りで、山田.txtに書き出します。最近dictionaryに凝っているのでその流れでやってみました。35000行もあって、うまく動くかどうかはわかりませんが...。XL2000用のコードです。その他条件はコードから読み取って下さい。 Sub test() Dim sourceRange As Range Dim targetRange As Range Dim myDic As Object Dim i As Long, j As Long Dim myKey As Variant Set sourceRange = ActiveSheet.Range("A1").CurrentRegion 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, 3) Else Set myDic.Item(.Value) = Union(myDic.Item(.Value), targetRange.Resize(1, 3)) End If End With Next i myKey = myDic.keys For i = 0 To myDic.Count - 1 saveToText (myDic.Item(myKey(i))) Next i Set myDic = Nothing End Sub Private Sub saveToText(targetRange As Range) Dim fso As Object Dim filePath As String Dim i As Long, j As Long Dim oneLine As String Dim area As Range filePath = ThisWorkbook.Path & "\" & targetRange.Cells(1).Value & ".txt" Set fso = CreateObject("Scripting.FileSystemObject") With fso.CreateTextFile(filePath) For Each area In targetRange.Areas For i = 1 To area.Rows.Count oneLine = "" For j = 1 To area.Columns.Count If oneLine = "" Then oneLine = area.Cells(i, j).Text Else oneLine = oneLine & vbTab & area.Cells(i, j).Text End If Next j .writeLine oneLine Next i Next area .Close End With Set fso = Nothing End Sub
その他の回答 (1)
- merlionXX
- ベストアンサー率48% (1930/4007)
学生に物事を教えている方の文章とは思えません。 > A列の山田・鈴木ごとのファイルを作りたいのです。 個人別ということですか? 1行目の「山田」と2行目、4行目の「山田」は同一人物ですか? 同一人物ならどうすればいいんでしょう? 5000人もいたら同姓同名も可能性があるんじゃないですか?個人の識別は名前ではなく学籍番号とかのユニークなものにはできないのですか? > マクロで自動の分割と自動の保存はそれぞれできたのですが > うまくつながらないのです。 つながるとはどういう状態をいうのですか? 何がうまくいかないのか自作のコードを差し支えない範囲で掲示するとか、もっと具体的に書いた方がアドバイスを得られると思います。
お礼
すみませんでした(T_T) 大学の職員として働いてるのですがはずかしい限りです。 山田という名前の前にユニークな学生コードを持っています。 VBAの本を4冊かって 無事作成することができました。 気分を害してしまうような文章を書いてしまい 本当に申し訳なかったです(>_<) もっと勉強いたします。
お礼
ありがとうございます。 自分でも試行錯誤して作りましたが こちらの方がエラーもバグも出ず実行できました。 おはずかしい質問で申し訳なかったです(>_<) ご親切にありがとうございました。 もっと勉強いたします