Excel VBA質問箱 IV

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

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


9454 / 13646 ツリー ←次へ | 前へ→

【27224】csv中の英字をカットオフするには にしもり 05/8/2(火) 19:20 質問[未読]
【27229】Re:csv中の英字をカットオフするには かみちゃん 05/8/2(火) 20:24 発言[未読]
【27235】Re:csv中の英字をカットオフするには m2m10 05/8/3(水) 8:32 お礼[未読]
【27241】Re:csv中の英字をカットオフするには awu 05/8/3(水) 12:39 回答[未読]
【27242】Re:csv中の英字をカットオフするには にしもり 05/8/3(水) 12:56 お礼[未読]

【27224】csv中の英字をカットオフするには
質問  にしもり  - 05/8/2(火) 19:20 -

引用なし
パスワード
   こんにちは。
9000レコードほどのCSVファイルがあります。
EXCELであけるとQ列(フィールド名は「SIZE」)に以下のように入っています。
6885M
31724M
165M
・・・

このMをとりたいのです。

6885
31724
165
・・・・
という具合にしたいのです。
さらにこれをT列(フィールド名も何もない)に転記したいのです。
なにかよい方法はありますか?
csvはあまりいじったことがありません。
エディターがないとできませんか。

【27229】Re:csv中の英字をカットオフするには
発言  かみちゃん  - 05/8/2(火) 20:24 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>さらにこれをT列(フィールド名も何もない)に転記したいのです。

よくわかりませんが、T列に
=SUBSTITUTE(A1,"M","")
という数式を設定することではいけませんか?

どうしても、VBAでというのであれば、
Replace関数でできると思いますが・・・

【27235】Re:csv中の英字をカットオフするには
お礼  m2m10  - 05/8/3(水) 8:32 -

引用なし
パスワード
   こんちは
私もかみちゃんさんの方法を勧めますが。

Open #       でCSV開き
 Line Input #1  でレコードをとり
 
  Split      で配列にいれ
     
  len()      文字の長さを取得

  =mid( ,1,len( )-)   で別ける

 こんな方法も有ります。

【27241】Re:csv中の英字をカットオフするには
回答  awu  - 05/8/3(水) 12:39 -

引用なし
パスワード
   CSVファイルをシートに表示したくないようにも取れますが・・・
もし、そうであれば、新規ブックの標準モジュール等に下記コードを貼り付けて
実行すると、ご希望のファイル内容に書き換わると思います。


Sub CSV書換()
Dim FNum As Integer
Dim WNum As Integer
Dim N As Integer, Rw As Long
Dim FName, InData, Ary
Dim WName As String, OutData As String
FName = Application _
  .GetOpenFilename("CSV ファイル(*.csv),*.csv", , "CSVファイルの指定")
If FName = False Then Exit Sub
N = InStrRev(FName, "\")
WName = Left(FName, N) & "Work" & Right(FName, Len(FName) - N)
FNum = FreeFile
Open FName For Input As FNum
WNum = FreeFile
Open WName For Output As WNum
Do Until EOF(FNum)
  OutData = ""
  Line Input #FNum, InData
  Ary = Split(Trim(InData), ",")
  If UBound(Ary) >= 16 Then
    If Right(Ary(16), 1) = "M" Then
      Ary(16) = Left(Ary(16), Len(Ary(16)) - 1)
    End If
    If UBound(Ary) < 19 Then
      ReDim Preserve Ary(19)
    End If
    If Rw > 0 Then Ary(19) = Ary(16)
  End If
  For N = 0 To UBound(Ary)
    OutData = OutData & Ary(N)
    If N < UBound(Ary) Then OutData = OutData & ","
  Next N
  Print #WNum, OutData
  Rw = Rw + 1
Loop
Close #WNum
Close #FNum
On Error Resume Next
FileCopy WName, FName
If Err.Number > 0 Then
  MsgBox Err.Description & vbLf & vbLf & _
    "指定のCSVファイルを閉じてから実行してください。", vbCritical
  Exit Sub
End If
Kill WName
MsgBox "ファイルの修正完了 !! (全行数 " & Rw & " 行) ", vbInformation
End Sub

【27242】Re:csv中の英字をカットオフするには
お礼  にしもり  - 05/8/3(水) 12:56 -

引用なし
パスワード
   ▼awu さん、かみちゃんさん、m2m10さん:

ありがとうございます。
かみちゃんさんのでやりたいことは満たせました。
勉強のため、m2m10さんの方式でもやってみようとおもっていましたら、
awu さんの高度なお答えが入ってきました。
正直わたしにはついていく自信がありませんが、トレースしてみたいと思います。
本当にどうもありがとうございました。

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