Excel VBA質問箱 IV

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

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


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

【42104】セル中の文字の置き換え方法での 質問(煮詰まった) 06/9/1(金) 9:49 質問[未読]
【42105】Re:セル中の文字の置き換え方法での だるま 06/9/1(金) 11:12 回答[未読]
【42227】Re:セル中の文字の置き換え方法での 質問(煮詰まった) 06/9/4(月) 16:24 質問[未読]
【42232】Re:セル中の文字の置き換え方法での かみちゃん 06/9/4(月) 17:36 発言[未読]
【42241】Re:セル中の文字の置き換え方法での Hirofumi 06/9/4(月) 20:49 回答[未読]
【42243】Re:セル中の文字の置き換え方法での Hirofumi 06/9/4(月) 21:43 回答[未読]
【42245】Re:セル中の文字の置き換え方法での Hirofumi 06/9/4(月) 22:14 回答[未読]

【42104】セル中の文字の置き換え方法での
質問  質問(煮詰まった)  - 06/9/1(金) 9:49 -

引用なし
パスワード
   セル中の中で文字の置換を教えて下さい。
変換結果のファイルをACCESSに読み込み処理をしています。

CSVファイルでデータを読み込んでいるのですが、
どうしても、セルの中にカンマを含むデータがあり
その対応に困っています。
カンマが含まれるセルはユニークで固定で特定できません。

(例)

="AAA1,BBB1,CCC1",="11",="12",="13,A",="99A"\n
="AAA2,BBB2,CCC2",="21",="22",="23,A",="99B"\n

そのレコードは改行マークで終了している。

を読み込み

セル中に,(カンマ)のある箇所は別の文字に置き換える。例えば.(点)
に置き換えたいのですが、うまい方法があれば教えて
下さい。宜しくお願いします。

IF文とREPLACE 命令でできそうなきもするのですが。。。

【42105】Re:セル中の文字の置き換え方法での
回答  だるま WEB  - 06/9/1(金) 11:12 -

引用なし
パスワード
   データは、="xxx"の形でそれがカンマ区切りになっているのですね。

でしたら、,=" をデータ中に存在しない文字たとえば ! などに置き換えて(Replace)、
Split関数で分解し、
分解した要素の2つめ以降の頭に対して再度、 =" を付け加えたらどうでしょうか。^d^

【42227】Re:セル中の文字の置き換え方法での
質問  質問(煮詰まった)  - 06/9/4(月) 16:24 -

引用なし
パスワード
   アドバイスありがとうございました。
イメージがわかないので、お手数ですがサンプルを
記述してもらえないでしょうか?

条件)
読み込みファイルはCSVファイル
但しデータは
="AAA,BBB",="CCCC",="DDD,EEE"となっている。
この場合に、1行毎データを読み込み
左端が"で右端が"の場合のみ、その中のデータの,を。に置き換える。
置換後のファイルはCSVファイルに出力して保存する。

お手数ですがお願いします。

自分でも進めてみるので宜しくお願いします。

【42232】Re:セル中の文字の置き換え方法での
発言  かみちゃん  - 06/9/4(月) 17:36 -

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

横から失礼します。

>イメージがわかないので、お手数ですがサンプルを
>記述してもらえないでしょうか?

私も似たことをしているのですが、以下のような感じでいかがでしょうか?

Sub Macro1()
 Dim strFileName As String
 Dim strTextLine As String
 Dim vntData As Variant
 Dim lngRow As Long
 
 strFileName = Application.GetOpenFilename("CSVファイル,*.csv")
 
 Open strFileName For Input As #1
 Do While Not EOF(1)
  Line Input #1, strTextLine
  lngRow = lngRow + 1
  vntData = Split(Replace(Mid(strTextLine, 3), ",=""", ","""), """,""")
  Cells(lngRow, 1).Resize(, UBound(vntData)).Value = vntData
  Erase vntData
 Loop
 Close #1
 
 MsgBox "終了しました"
End Sub

【42241】Re:セル中の文字の置き換え方法での
回答  Hirofumi  - 06/9/4(月) 20:49 -

引用なし
パスワード
   [#41872] Re:csvファイルにて Hirofumi - 06/8/24(木) 19:08 - 
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=41872;id=excel

のコードで以下を修正して、Csvを読み込んだら?

修正は、「Private Sub CSVRead」の中だけに成ります

Private Sub CSVRead(ByVal strFileName As String, _
          ByRef rngWrite As Range, _
          Optional ByRef lngRow As Long = 1, _
          Optional strDelim As String = ",")

  Dim i As Long                      '☆追加
  Dim dfn As Integer
  Dim vntField As Variant
  Dim strBuff As String
  Dim blnMulti As Boolean
  Dim strREC As String

  'ファイルをOpen
  dfn = FreeFile
  Open strFileName For Input As dfn

  Do Until EOF(dfn)
    '1行読み込み
    Line Input #dfn, strBuff
    '論理レコードに物理レコードを追加
    strREC = strREC & strBuff
    '"="を""に置き換え
    strREC = Replace(strREC, "=", "")          '☆追加
    '論理レコードをフィールドに分割
    vntField = SplitCsv(strREC, strDelim, , , blnMulti)
    'フィールド内で改行が有る場合
    If Not blnMulti Then
      '★各Fieldで先頭に"="が必要なら
'      For i = 0 To UBound(vntField)          '☆追加
'        vntField(i) = "=" & vntField(i)       '☆追加
'      Next i                     '☆追加
      With rngWrite.Offset(lngRow)
        With .Resize(, UBound(vntField) + 1)
          '出力範囲を文字列に設定
          .NumberFormat = "@"
          'データを出力
          .Value = vntField
        End With
      End With
      '出力行をインクリメント
      lngRow = lngRow + 1
      strREC = ""
    Else
      'セル内改行として残す場合
      strREC = strREC & vbLf
    End If
  Loop

  Close #dfn

End Sub

【42243】Re:セル中の文字の置き換え方法での
回答  Hirofumi  - 06/9/4(月) 21:43 -

引用なし
パスワード
   もし、","を"。"に変換する事が主目的なら

      '★各Fieldで先頭に"="が必要なら
      For i = 0 To UBound(vntField)          '☆追加
        vntField(i) = "=" & vntField(i)       '☆追加
      Next i                     '☆追加


      '","を"。"に変換する場合
      For i = 0 To UBound(vntField)              '☆追加
        lngPos = InStr(1, vntField(i), ",", vbBinaryCompare) '☆追加
        If lngPos > 0 Then                 '☆追加
          Mid(vntField(i), lngPos, 1) = "。"       '☆追加
        End If                       '☆追加
      Next i                         '☆追加

にすれば、善いと思いますが?

【42245】Re:セル中の文字の置き換え方法での
回答  Hirofumi  - 06/9/4(月) 22:14 -

引用なし
パスワード
   カンマが複数の場合、この方が善いかも?

Private Sub CSVRead(ByVal strFileName As String, _
          ByRef rngWrite As Range, _
          Optional ByRef lngRow As Long = 1, _
          Optional strDelim As String = ",")

  Dim i As Long                      '☆追加
  Dim dfn As Integer
  Dim vntField As Variant
  Dim strBuff As String
  Dim blnMulti As Boolean
  Dim strREC As String

  'ファイルをOpen
  dfn = FreeFile
  Open strFileName For Input As dfn

  Do Until EOF(dfn)
    '1行読み込み
    Line Input #dfn, strBuff
    '論理レコードに物理レコードを追加
    strREC = strREC & strBuff
    '"="を""に置き換え
    strREC = Replace(strREC, "=", "")          '☆追加
    '論理レコードをフィールドに分割
    vntField = SplitCsv(strREC, strDelim, , , blnMulti)
    'フィールド内で改行が有る場合
    If Not blnMulti Then
      '★
      For i = 0 To UBound(vntField)           '☆追加
        '各Fieldで先頭に"="が必要なら
'        vntField(i) = "=" & vntField(i)       '☆追加
        '","を"。"に変換する場合
        vntField(i) = Replace(vntField(i), ",", "。") '☆追加
      Next i                      '☆追加
      With rngWrite.Offset(lngRow)
        With .Resize(, UBound(vntField) + 1)
          '出力範囲を文字列に設定
          .NumberFormat = "@"
          'データを出力
          .Value = vntField
        End With
      End With
      '出力行をインクリメント
      lngRow = lngRow + 1
      strREC = ""
    Else
      'セル内改行として残す場合
      strREC = strREC & vbLf
    End If
  Loop

  Close #dfn

End Sub

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