Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7800 / 13645 ツリー ←次へ | 前へ→

【36423】シートに振分け Seri 06/3/30(木) 19:05 質問[未読]
【36427】Re:シートに振分け Kein 06/3/30(木) 19:38 回答[未読]
【36441】Re:シートに振分け Seri 06/3/31(金) 10:25 お礼[未読]
【36442】Re:シートに振分け Seri 06/3/31(金) 10:34 お礼[未読]
【36462】Re:シートに振分け Kein 06/3/31(金) 17:10 回答[未読]
【36787】Re:シートに振分け Seri 06/4/13(木) 20:10 質問[未読]
【36791】Re:シートに振分け Kein 06/4/13(木) 23:02 回答[未読]

【36423】シートに振分け
質問  Seri  - 06/3/30(木) 19:05 -

引用なし
パスワード
   はじめまして。色々と見てみたのですがやり方がわかりません。
初心者なのですがよろしくお願いします。

下記のCSVデータをエクセルにて読み込んで数字毎にシートに
振分けたいのですがいい方法はないでしょうか?


***********振分け前データ***********
1,2005/10/10,AAAAA,1500
2,2005/10/10,AAAAA,1500
2,2005/10/10,AAAAA,1500
4,2005/10/10,AAAAA,1500

***********振分け後データ***********
1シートに
1,2005/10/10,AAAAA,1500

2シートに
2,2005/10/10,AAAAA,1500
2,2005/10/10,AAAAA,1500

4シートに
4,2005/10/10,AAAAA,1500


よろしくお願いします。


OS:WINDOWS2000  EXCEL2003を使用しています。

【36427】Re:シートに振分け
回答  Kein  - 06/3/30(木) 19:38 -

引用なし
パスワード
   概ね、こんな感じです。コードの意味を、よくチェックしてから使って下さい。

Sub CSV読み込み()
  Dim MyF As String, Buf As String
  Dim Ary As Variant
  Dim SCnt As Integer, Num As Integer
  Const SvFol As String = _
  "C:\Documents and Settings\User\My Documents\My CSV"
  '↑保存先フォルダーのパスを正確に指定する。

  ChDir SvFol
  With Application
   MyF = .GetOpenFilename("CSVファイル(*.csv),*.csv")
   If MyF = "False" Then Exit Sub
   .ScreenUpdating = False
  End With
  SCnt = Worksheets.Count
  Open MyF For Input Access Read As #1
  Do Until EOF(1)
   Line Input #1, Buf
   Ary = Split(Buf, ",")
   Num = Val(Ary(0))
   If Num <= SCnt Then
     Worksheets(Num).Range("A65536").End(xlUp) _
     .Offset(1).Resize(, UBound(Ary) + 1).Value = Ary
   Else
     Debug.Print Buf
   End If
   Erase Ary
  Loop
  Close #1  
  With Application
   ChDir .DefaultFilePath
   .ScreenUpdating = True
  End With
End Sub

【36441】Re:シートに振分け
お礼  Seri  - 06/3/31(金) 10:25 -

引用なし
パスワード
   Keinさん

おはようございます。
試したところうまく動きました。ありがとうございます。

【36442】Re:シートに振分け
お礼  Seri  - 06/3/31(金) 10:34 -

引用なし
パスワード
   もうひとつお聞きしたいのですが
振り分ける際に1〜4を1シートに5〜6を2シートに表で表示し1,2,3,4の最終行に
合計を表示することは可能でしょうか?

***********振分け前データ***********
1,2005/10/10,AAAAA,1500
2,2005/10/10,AAAAA,1500
2,2005/10/10,AAAAA,1500
4,2005/10/10,AAAAA,1500
5,2005/10/10,AAAAA,1500

***********振分け後データ***********
1シートに
NO1
1,2005/10/10,AAAAA,1500
合計         1500

NO2
2,2005/10/10,AAAAA,1500
2,2005/10/10,AAAAA,1500
合計         3000

NO3
4,2005/10/10,AAAAA,1500
合計         1500


2シートに
NO5
1,2005/10/10,AAAAA,1500
合計         1500

NO6
2,2005/10/10,AAAAA,1500
2,2005/10/10,AAAAA,1500
合計         3000


よろしくお願いします。

【36462】Re:シートに振分け
回答  Kein  - 06/3/31(金) 17:10 -

引用なし
パスワード
   下準備として、Sheet1,Sheet2のA1:D1セルに、項目を入れておいて下さい。
それ以外は何も入力しないこと。

Sub CSV読み込み2()
  Dim MyF As String, Buf As String
  Dim Ary As Variant
  Dim Num As Integer, i As Integer
  Const SvFol As String = _
  "C:\Documents and Settings\User\My Documents\My CSV"
  '↑保存先フォルダーのパスを正確に指定する。

  ChDir SvFol
  With Application
   MyF = .GetOpenFilename("CSVファイル(*.csv),*.csv")
   If MyF = "False" Then Exit Sub
   .ScreenUpdating = False
   .DisplayAlerts = False
  End With
  Worksheets(1).Cells.RemoveSubTotal
  Worksheets(2).Cells.RemoveSubTotal
  Open MyF For Input Access Read As #1
  Do Until EOF(1)
   Line Input #1, Buf
   Ary = Split(Buf, ",")
   Num = Val(Ary(0))
   If Num < 5 Then
     i = 1
   ElseIf Num < 7 Then
     i = 2
   Else
     Debug.Print Buf: GoTo NLine
   End If
   Worksheets(i).Range("A65536").End(xlUp) _
   .Offset(1).Resize(, 4).Value = Ary
NLine:
   Erase Ary
  Loop
  Close #1
  For i = 1 To 2
   With Worksheets(i)
     .Range("A1", .Range("A65536").End(xlUp)).Resize(, 4) _
     .Sort Key1:=.Range("A1"), Order1:=xlAscending, _
     Header:=xlYes, Orientation:=xlSortColumns
     .Range("A1").Subtotal 1, xlSum, Array(3), True
     .Cells.ClearOutLine
   End With
  Next i
  With Application
   ChDir .DefaultFilePath
   .ScreenUpdating = True
   .DisplayAlerts = True
  End With
End Sub

【36787】Re:シートに振分け
質問  Seri  - 06/4/13(木) 20:10 -

引用なし
パスワード
   Keinさん

お返事遅くなり申し訳ありません。
試してみたところ数値が入るはずが文字になってしまい
合計を求めることができません。どうすればいいのでしょうか?

【36791】Re:シートに振分け
回答  Kein  - 06/4/13(木) 23:02 -

引用なし
パスワード
   集計する列を間違えていたようです。すいません。以下のコードでやってみて下さい。

Sub CSV読み込み2()
  Dim MyF As String, Buf As String
  Dim Ary As Variant
  Dim Num As Integer, i As Integer
  Dim C As Range
  Const SvFol As String = _
  "C:\Documents and Settings\User\My Documents\My CSV"
  '↑保存先フォルダーのパスを正確に指定する。

  ChDir SvFol
  With Application
   MyF = .GetOpenFilename("CSVファイル(*.csv),*.csv")
   If MyF = "False" Then Exit Sub
   .ScreenUpdating = False
   .DisplayAlerts = False
  End With
  Worksheets(1).Cells.RemoveSubtotal
  Worksheets(2).Cells.RemoveSubtotal
  Open MyF For Input Access Read As #1
  Do Until EOF(1)
   Line Input #1, Buf
   Ary = Split(Buf, ",")
   Num = Val(Ary(0))
   If Num < 5 Then
     i = 1
   ElseIf Num < 7 Then
     i = 2
   Else
     Debug.Print Buf: GoTo NLine
   End If
   Worksheets(i).Range("A65536").End(xlUp) _
   .Offset(1).Resize(, 4).Value = Ary
NLine:
   Erase Ary
  Loop
  Close #1
  For i = 1 To 2
   With Worksheets(i)
     For Each C In .Range("D2", .Range("D65536").End(xlUp))
      C.Value = Val(C.Value)
     Next
     .Range("A1", .Range("A65536").End(xlUp)).Resize(, 4) _
     .Sort Key1:=.Range("A1"), Order1:=xlAscending, _
     Header:=xlYes, Orientation:=xlSortColumns
     .Range("A1").Subtotal 1, xlSum, Array(4), True
     .Cells.ClearOutline
   End With
  Next i
  With Application
   ChDir .DefaultFilePath
   .ScreenUpdating = True
   .DisplayAlerts = True
  End With
End Sub

7800 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free