Excel VBA質問箱 IV

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

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


9974 / 13644 ツリー ←次へ | 前へ→

【24414】データ変換について 初心者 05/4/21(木) 19:58 質問[未読]
【24418】Re:データ変換について kazu 05/4/21(木) 20:56 発言[未読]
【24455】Re:データ変換について 初心者 05/4/22(金) 14:15 質問[未読]
【24476】Re:データ変換について kazu 05/4/22(金) 17:24 回答[未読]
【24477】Re:データ変換について kazu 05/4/22(金) 18:10 回答[未読]
【24478】Re:データ変換について 初心者 05/4/22(金) 19:50 お礼[未読]

【24414】データ変換について
質問  初心者  - 05/4/21(木) 19:58 -

引用なし
パスワード
   cz020
cd04/12/12
cc1234
cc1234
cd04/12/16
cc2222
というテキストデータがあります。
これをエクセルで
  1   2   3   4
1 020  1234    04/12/12
2 020  1234    04/12/12
3 020  1234    04/12/12
4 020  2222    04/12/16
というデータが作りたいのですが、
1列目にはczのデータを2列目が入力されている最終行まで入れて行き、4列目にはcdの日付を次の日付データの所までうち日付が変わるとまたその日付を打つという感じにエクセルに打ちたいのですがどうすればいいでしょうか?

【24418】Re:データ変換について
発言  kazu  - 05/4/21(木) 20:56 -

引用なし
パスワード
   Sub Sumple()
'全データの1列目に挿入するデータの頭文字
Const MasterFlg As String = "cz"
'日付データと認識させる為の頭文字
Const DateFlg As String = "cd"
'詳細データとして認識させる為の頭文字
Const VluFlg As String = "cc"

Dim Buf()
Dim Cnt As Long, RCnt As Long
Dim TxtFile As String
Dim StrMAster As String, StrDate As String, StrData As String

Cnt = 0
RCnt = 1

TxtFile = Application.GetOpenFilename("*.txt,(*.txt)", , "読み込むテキストを選択", , False)

If TxtFile = "False" Then
  MsgBox "ファイルを選択してから実行して下さい。"
  Exit Sub
End If

Fil = FreeFile
Open TxtFile For Input As #Fil

Do Until EOF(Fil)
  ReDim Preserve Buf(Cnt)
  Input #Fil, Buf(Cnt)
  Cnt = Cnt + 1
Loop

For Cnt = 0 To UBound(Buf)
  If Buf(Cnt) Like MasterFlg & "*" Then
    StrMAster = Mid(Buf(Cnt), Len(MasterFlg) + 1)
  ElseIf Buf(Cnt) Like DateFlg & "*" Then
    StrDate = Mid(Buf(Cnt), Len(DateFlg) + 1)
  ElseIf Buf(Cnt) Like VluFlg & "*" Then
    StrData = Mid(Buf(Cnt), Len(VluFlg) + 1)
    With Range(Cells(RCnt, 1), Cells(RCnt, 3))
      .NumberFormatLocal = "@"
      .Value = Array(CStr(StrMAster), StrData, Format(StrDate, "YYYY/MM/DD"))
    End With
    RCnt = RCnt + 1
  End If
Next

End Sub

【24455】Re:データ変換について
質問  初心者  - 05/4/22(金) 14:15 -

引用なし
パスワード
   すいません追加質問なのですが、テキストファイルがCZ02011のデータで020だけを読み込む場合も教えていただけますでしょうか?  

【24476】Re:データ変換について
回答  kazu  - 05/4/22(金) 17:24 -

引用なし
パスワード
   >すいません追加質問なのですが、テキストファイルがCZ02011のデータで020だけを読み込む場合も教えていただけますでしょうか?  

↑の場合条件は何になりますか?

CZの後3文字を取得する方法でいいのでしょうか?
それとも他の条件がある?(1以降を切り捨てるとか、0から始まって0までとか・・・)

それ次第で回答が変わりますが・・・

【24477】Re:データ変換について
回答  kazu  - 05/4/22(金) 18:10 -

引用なし
パスワード
   今日はちょっと時間が無いんで一応これで出来ればこれで・・・。
条件が違う場合はどなたかがサポートしてくれると思います。


---> から <--- 迄がひとつの構文になります。


  If Buf(Cnt) Like MasterFlg & "*" Then
    StrMAster = Mid(Buf(Cnt), Len(MasterFlg) + 1)
  ElseIf Buf(Cnt) Like DateFlg & "*" Then
    StrDate = Mid(Buf(Cnt), Len(DateFlg) + 1)
  ElseIf Buf(Cnt) Like VluFlg & "*" Then
    StrData = Mid(Buf(Cnt), Len(VluFlg) + 1)
    With Range(Cells(RCnt, 1), Cells(RCnt, 3))
      .NumberFormatLocal = "@"
      .Value = Array(CStr(StrMAster), StrData, Format(StrDate, "YYYY/MM/DD"))
    End With
    RCnt = RCnt + 1
  End If

の中の
StrData = Mid(Buf(Cnt), Len(VluFlg) + 1)
の部分をいづれか条件にあうものに変更してみて下さい。


'現状(CZの後全部取得)  --->
    StrData = Mid(Buf(Cnt), Len(VluFlg) + 1)
'現状(CZの後全部取得)  <---
    
'CZの後3文字 --->
    StrData = Mid(Buf(Cnt), Len(VluFlg) + 1, 3)      
'CZの後3文字 <---
    
'特定文字列1から特定文字列2迄 (特定文字列含む) --->
    StrData = Mid(Buf(Cnt), Len(VluFlg) + 1)
    Bunri1 = "0"                  '------- 特定文字列1  
    Bunri2 = "0"                  '------- 特定文字列2 
    Fst = InStr(1, StrData, Bunri1)
    Lst = InStr(Fst + 1, StrData, Bunri2)
    If Fst <> 0 And Lst <> 0 Then
      StrData = Mid(StrData, Fst, Lst - Fst + Len(Bunri2))
    End If
'特定文字列1から特定文字列2迄 (特定文字列含む) <---

'特定文字列1から特定文字列2迄 (特定文字列含まない) --->
    StrData = Mid(Buf(Cnt), Len(VluFlg) + 1)
    Bunri1 = "0"                  '------- 特定文字列1  
    Bunri2 = "0"                  '------- 特定文字列2 
    Fst = InStr(1, StrData, Bunri1)
    Lst = InStr(Fst + 1, StrData, Bunri2)
    If Fst <> 0 And Lst <> 0 Then
      StrData = Mid(StrData, Fst + Len(Bunri1), Lst - Fst - Len(Bunri1))
    End If
'特定文字列1から特定文字列2迄 (特定文字列含まない) 

【24478】Re:データ変換について
お礼  初心者  - 05/4/22(金) 19:50 -

引用なし
パスワード
   kazuさんありがとうございました^^
すいません、ちょっと内容が変更になりまして、せっかくご教授いただいたのですが、また別の方法の時にお聞きしたいと思いますのでその時はよろしくお願いします。本当にすいません<m(__)m>

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