
Excel2003のVBA作成について、ご教授ねがいます。期限もなく本当に困っております。
■ 実現したいこと
Excelシートの1シート目にあるデータを所属コード毎に振り分け、自動で2シート目、3シート目に振り分けたい。
※1シート目のデータ自体は、所属コード毎に既にソートされている状態
(1) Excelの1シート目に以下のような全データ1000件程度ある。
所属コード/所属名/個人番号/個人名
001/東京/111/山田華子
001/東京/112/鈴木太郎
002/大阪/331/安井徹
005/福岡/444/山下健二
(2) 所属コード毎に2シート目、3シート目に振り分けたい。
2シート目:001/東京/123/山田華子
001/東京/112/鈴木太郎
3シート目:002/大阪/331/安井徹
4シート目:005/福岡/444/山下健二
■ 環境
WindowsXP、office2003
■ スキル
簡単なコードを読み・修正ことができる程度です。1からコードを作成するスキルはありません。
■ 補足
Excel・Access、どちらでも構いません。
同様のファイルが100個、所属が1200ほどあるため、マンパワーでは難しく、プログラムにてできたらと思っております。宜しくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんばんは!
一例です。
Alt+F11キー → 画面左下の「This Workbook」をダブルクリックして
↓のコードをコピー&ペーストしマクロを実行してみてください。
Sub test()
Dim i, k, N As Long
Dim str As String
Dim ws As Worksheet
Set ws = Worksheets(1)
Application.ScreenUpdating = False
For i = 2 To Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
For k = 1 To Worksheets.Count
Select Case Len(ws.Cells(i, 1))
Case 1
str = "00" & ws.Cells(i, 1)
Case 2
str = "0" & ws.Cells(i, 1)
Case Else
str = ws.Cells(i, 1)
End Select
If Worksheets(k).Name = str Then
N = N + 1
End If
Next k
If N = 0 Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = str
End If
N = 0
Next i
For i = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row
For k = 2 To Worksheets.Count
Select Case Len(ws.Cells(i, 1))
Case 1
str = "00" & ws.Cells(i, 1)
Case 2
str = "0" & ws.Cells(i, 1)
Case Else
str = ws.Cells(i, 1)
End Select
If str = Worksheets(k).Name Then
If Worksheets(k).Cells(1, 1) = "" Then
ws.Rows(1).Copy Destination:=Worksheets(k).Cells(1, 1)
End If
If WorksheetFunction.CountIf(Worksheets(k).Columns(3), ws.Cells(i, 3)) = 0 Then
ws.Rows(i).Copy Destination:= _
Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Offset(1)
End If
End If
Next k
Next i
Application.ScreenUpdating = True
End Sub
※ 二度For~NextでLoopしています。
他に良い方法があればごめんなさいね。m(_ _)m
No.2
- 回答日時:
お急ぎの上、スキルが乏しく
且つ
>同様のファイルが100個、所属が1200ほどある
まず、状況を解決するにはかなりのレベルが必要です。
情報も少ないです。
1、ひとつのファイルはシートが1枚なのか。
2、所属ごとにシートを追加した場合、シート数は幾つぐらいになるのか。
3、1200の所属の一覧のデータはあるのか。
4、それぞれのファイル名や保存されたフォルダが統一されているのか
最後に
部署ごとに作成したシートをどのように活用するのか
仮に、現在、1枚のシートをもつファイルが100個あるのを
部署ごとに数百のシートをもつファイルを100個作って、便利になりますか?
私であれば
1、新規のファイルを作成
2、100個のファイルを開いて、新規の1枚のシートに追加していく。
データの一元化 と呼びます。情報が分散していると使いにくいですよね。
3、一元化されたデータから所属の一覧表を作成する。
関数でもピボットテーブルでも可能です。
4、一元化されたデータシートと所属を入力してデータを抽出シートを追加する。
所属ごとのシートは作りません。
あるセルに所属を入力すると
以下の行に条件にあったデータが一覧として抽出される機能を作ります。
資料の配布には、ここで作成した一つのファイルで済みますし、印刷して配布するのみ簡単
決して、所属ごとにシート数を増やしてはいけません。
何百もシートがあると移動するだけでも大変になります。
2もマクロが出来れば早いでしょうが、この際、手動で頑張ってください。
3については、ピボットテーブルを使って、所属の一覧表を作成してみてください。
4は
http://www.eurus.dti.ne.jp/yoneyama/Excel/filter …
にフィルターオプションの設定とマクロで抽出を実行させる方法が説明されていますので
ご一読してください。
基本は、データのシート
部署名一覧のシート
部署名を入力するとデータを抽出してくれるシート
この3枚で検討してみてください。
試しに、ひとつのファイルを開いて
3と4について試してみてください。
私が何を伝えたいか実感してもらえると思います。
データがシートごとに分散している。ファイルごとに分散していると必ず、この様な状況に
陥ります。
データは、ひとつのファイルで一枚のシートにまとめるように心がけてください。
No.1
- 回答日時:
以前私が回答したプログラムの中に、
今回質問された内容の動作に応用が利きそうだったので、
そのプログラムを少し改良してお答えします。
とりあえず以下のプログラムを実行すればほぼご希望通りの動作をすると思うので試してみてください。
ただし、このプログラムを実行する際の注意点として、
一番左の列は必ず正順列の所属コードを書いておくこと、
一番左側のシート(最初にExcelを起動したときにSheet1という名前になってるシート)
以外はすべて削除してしまうので、実行する前にバックアップを一応とっておいてください。
Public Sub sub_testText()
Dim i As Long, j As Long, k As Long
Dim lngBeforeNumber As Long
Dim lngAfteraNumber As Long
Dim wbkActiveSheet As Worksheet
Dim rngInputData As Range
Dim r As Range
Dim lngLastRow As Long
Dim lngLastColumn As Long
Dim varInputArray As Variant
Set wbkActiveSheet = ActiveSheet
With Worksheets(1)
lngLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To lngLastRow
If i = lngLastRow Then Exit For
lngBeforeNumber = .Cells(i, 1).Value
lngAfterNumber = .Cells(i + 1, 1).Value
If lngBeforeNumber = lngAfterNumber Then
Else
j = j + 1
End If
Next i
j = j + 1
If Worksheets.Count > 1 Then
For i = 2 To Worksheets.Count
Application.DisplayAlerts = False
Worksheets(2).Delete
Application.DisplayAlerts = True
Next i
End If
For i = 1 To j
Worksheets.Add after:=Worksheets(Worksheets.Count)
Next i
wbkActiveSheet.Activate
With Worksheets(1)
lngLastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With
j = 2
k = 1
For i = 2 To lngLastRow
If i = lngLastRow Then Exit For
' MsgBox Worksheets(1).Cells(i, 2).Value
lngBeforeNumber = .Cells(i, 1).Value
lngAfterNumber = .Cells(i + 1, 1).Value
If lngBeforeNumber = lngAfterNumber Then
With Worksheets(j)
If k = 1 And i = 1 Then
Worksheets(1).Range(Worksheets(1).Cells(k, 1), Worksheets(1).Cells(k, lngLastColumn)).Copy Destination:= _
.Range(.Cells(k, 1), .Cells(k, lngLastColumn))
k = k + 1
Else
Worksheets(1).Range(Worksheets(1).Cells(i, 1), Worksheets(1).Cells(i, lngLastColumn)).Copy Destination:= _
.Range(.Cells(k, 1), .Cells(k, lngLastColumn))
k = k + 1
End If
End With
Else
Worksheets(1).Range(Worksheets(1).Cells(i, 1), Worksheets(1).Cells(i, lngLastColumn)).Copy Destination:= _
Worksheets(j).Range(Worksheets(j).Cells(k, 1), Worksheets(j).Cells(k, lngLastColumn))
k = 1
j = j + 1
End If
Next i
Worksheets(1).Range(Worksheets(1).Cells(lngLastRow, 1), Worksheets(1).Cells(lngLastRow, lngLastColumn)).Copy Destination:= _
Worksheets(j).Range(Worksheets(j).Cells(k, 1), Worksheets(j).Cells(k, lngLastColumn))
' Worksheets(j).Cells(k, 1).Value = Worksheets(1).Cells(lngLastColumn, 2).Value
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- その他(Microsoft Office) EXCELの1行を1枚の用紙にそれぞれ印刷したい。 3 2022/10/10 11:35
- Access(アクセス) accessデータを指定したExcel、そして指定したセルへエクスポートするaccess VBAコー 2 2023/05/17 17:02
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- 政治 誰推しですか?東大率高めですけど 岸田文雄→早稲田大学法学部 山口那津男→東京大学法学部 泉健太→立 4 2022/07/04 03:14
- 地域研究 参議院選挙が6月22日公示され、東京選挙区には定員6人に対して34人が立候補しました。 1 2022/06/22 19:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロで該当処理できな...
-
Excelマクロのエラーを解決した...
-
特定の文字を含むシートだけマ...
-
【ExcelVBA】全シートのセルの...
-
実行時エラー'1004': WorkSheet...
-
エクセルVBA Ifでシート名が合...
-
XL:BeforeDoubleClickが動かない
-
シート名の一部を変更する方法...
-
ユーザーフォームに入力したデ...
-
シートが保護されている状態で...
-
別のシートから値を取得するとき
-
VBAで指定シート以外の選択
-
ExcelVBAから,引数を渡してVBs...
-
エクセルで通し番号を入れてチ...
-
VBAマクロでシートコピーした新...
-
VBAで以下の処理をする方法があ...
-
ExcelVBA:複数の特定のグラフ...
-
userFormに貼り付けたLabelを変...
-
【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を使ってシートを一定...
おすすめ情報