Excel VBA質問箱 IV

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

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


41909 / 76735 ←次へ | 前へ→

【39900】Re:CSVファイルを読み込むやり方(ソース...
発言  漂流民  - 06/7/4(火) 1:18 -

引用なし
パスワード
    ▼エクセルホーリー さん:
こんばんわ


>VC++ で作成したCSVファイルAをVC++でマクロを組んだエクセルBに
>読み込ませて、エクセルBに書き込み名前をつけて保存する処理を考えています。
ちょっと良く分かりませんが、

>このケースの場合VBAの中で構造体を作りカンマ区切りで読み込ませて、
>そのデータをセルに書き込むとゆうのが普通なのでしょうか?
>過去ログを見るとCSVファイルのデータを直接エクセルに書き込んでるように
>思えてしまいまして・・・
>
>どなたかアドバイスなどありましたらよろしくお願い致します。
エクセルVBAの場合、セルが利用できれば構造体・配列を作成するのは二度手間になります。
特に処理が必要なければ、
列(A〜IV)を構造体、行(1〜65536)を配列とみなして
直接エクセルに書き込むのが普通です。
(列:1byte、行:2byte)
「カンマ区切り」については過去ログを参照してください。
Split関数を使うと良いでしょう。

>プログラムの書き方についてのアドバイスもありましたらお願いします。
ザっと見ただけですが、

>    For count2 = 1 To 2
>'*************************************************************************
>'  ("B2:AF2") と ("B17:AF17")
>'*************************************************************************
>      If count2 = 1 Then
>        Range(Cells(2 + 31 * (count1 - 1), "B"), Cells(2 + 31 * (count1 - 1), "AF")).Select
>      Else
>        Range(Cells(17 + 31 * (count1 - 1), "B"), Cells(17 + 31 * (count1 - 1), "AF")).Select
>      End If
せっかくループで回しているのにこの条件分岐はムダです。
count2を上手く利用しましょう。

あと、
>      Selection.Borders(xlDiagonalDown).LineStyle = xlNone
>      Selection.Borders(xlDiagonalUp).LineStyle = xlNone
>      With Selection.Borders(xlEdgeLeft)
>        .LineStyle = xlContinuous
>        .Weight = xlThin
>        .ColorIndex = xlAutomatic
>      End With
>      With Selection.Borders(xlEdgeTop)
>        .LineStyle = xlContinuous
>        .Weight = xlThin
>        .ColorIndex = xlAutomatic
>      End With
>      With Selection.Borders(xlEdgeBottom)
>        .LineStyle = xlContinuous
>        .Weight = xlThin
>        .ColorIndex = xlAutomatic
>      End With
>      With Selection.Borders(xlEdgeRight)
>        .LineStyle = xlContinuous
>        .Weight = xlThin
>        .ColorIndex = xlAutomatic
>      End With
ループ中、マクロ記録されたと思われるこれが良く使われているので
関数化した方が良いでしょう。


やりたいことはこれで済むのでは?

Sub Macro1()
  Dim count1 As Integer   'カウンター
  Dim count2 As Integer   'カウンター
  Dim count3 As Integer   'カウンター
  Dim cellpos As Long

  For count1 = 1 To 3
    For count2 = 1 To 2
      cellpos = 15 * (count2 - 1) + 31 * (count1 - 1)
      Call setcell(Range(Cells(2 + cellpos, "B"), Cells(2 + cellpos, "AF")))
      Call setcell(Range(Cells(3 + cellpos, "C"), Cells(3 + cellpos, "AF")))
      Call setcell(Range(Cells(4 + cellpos, "D"), Cells(4 + cellpos, "AF")))
      For count3 = 5 To 16
        Call setcell(Range(Cells(count3 + cellpos, "E"), Cells(5 + cellpos, "AF")))
      Next count3
      Call setcell(Range(Cells(3 + cellpos, "B"), Cells(16 + cellpos, "B")))
      Call setcell(Range(Cells(4 + cellpos, "C"), Cells(16 + cellpos, "C")))
      Call setcell(Range(Cells(5 + cellpos, "D"), Cells(16 + cellpos, "D")))
      Call setcell(Range(Cells(5 + cellpos, "G"), Cells(16 + cellpos, "G")))
      Call setcell(Range(Cells(5 + cellpos, "AB"), Cells(16 + cellpos, "AB")))
    Next count2
    Range(Cells(2 + 31 * (count1 - 1), "B"), Cells(31 + 31 * (count1 - 1), "AF")).Interior.ColorIndex = 2
  Next count1
  ActiveWorkbook.Save
End Sub

Function setcell(cel As Range)
  With cel
    .Borders(xlEdgeLeft).Weight = xlThin
    .Borders(xlEdgeTop).Weight = xlThin
    .Borders(xlEdgeBottom).Weight = xlThin
    .Borders(xlEdgeRight).Weight = xlThin
  End With
End Function

※count3は使用されていないようなので再利用しました。


><CSVのデータ>
>1,"AAA"
>2,"BBB"
>L,aaa,"あいうえお(0"シングル"/1"ツイン")",0
>L,bbb,"かきくけこ(0"指定OFF"/1"指定ON")",1
>L,ccc,"さしすせそ(0"指定OFF"/1"指定ON")",0
>2,"CCC"
>3,"DDD"
>L,ddd,"たちつてと(m/inch)(0"m"/1"inch")",1
>
>1の時 AAAは "B2" に書き込む
>2の時 BBBは "C3" に書き込む
>Lの時 aaaは "E5", "あいうえお(0"シングル"/1"ツイン")"   "H5", 0 "AC5" に書き込む
>Lの時 bbbは "E6", "かきくけこ(0"指定OFF"/1"指定ON")" "H6", 1 "AC6" に書き込む
>Lの時 cccは "E7", "さしすせそ(0"指定OFF"/1"指定ON")", "H7", 0 "AC7" に書き込む
>2の時,CCCは "C18" に書き込む
>3の時,DDDは "D19" に書き込む
>Lの時,dddは "E20" "たちつてと(m/inch)(0"m"/1"inch")" "H20", 1 AC20に書き込む
>
>データがなくなるまで繰り返す
すいません、ちょっと条件判定が良く分かりません。

0 hits

【39882】CSVファイルを読み込むやり方 エクセルホーリー 06/7/3(月) 15:42 質問
【39883】Re:CSVファイルを読み込むやり方(ソース) エクセルホーリー 06/7/3(月) 15:48 質問
【39884】Re:CSVファイルを読み込むやり方(ソース) エクセルホーリー 06/7/3(月) 15:50 質問
【39885】Re:CSVファイルを読み込むやり方(ソース) エクセルホーリー 06/7/3(月) 15:51 質問
【39886】Re:CSVファイルを読み込むやり方(ソース) エクセルホーリー 06/7/3(月) 15:51 質問
【39900】Re:CSVファイルを読み込むやり方(ソース... 漂流民 06/7/4(火) 1:18 発言
【39907】Re:CSVファイルを読み込むやり方(ソース... エクセルホーリー 06/7/4(火) 9:22 質問
【39911】Re:CSVファイルを読み込むやり方(ソース... neptune 06/7/4(火) 9:40 回答
【39912】Re:CSVファイルを読み込むやり方(ソース... エクセルホーリー 06/7/4(火) 10:21 お礼

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