Excel VBA質問箱 IV

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

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


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

【14473】セル内の改行コードを消したい バカボン 04/5/30(日) 16:11 質問[未読]
【14475】Re:セル内の改行コードを消したい つん 04/5/30(日) 16:29 回答[未読]
【14479】Re:セル内の改行コードを消したい バカボン 04/5/30(日) 16:41 質問[未読]
【14481】Re:セル内の改行コードを消したい つん 04/5/30(日) 16:55 回答[未読]
【14482】Re:セル内の改行コードを消したい バカボン 04/5/30(日) 17:05 質問[未読]
【14484】Re:セル内の改行コードを消したい つん 04/5/30(日) 17:12 発言[未読]
【14485】Re:セル内の改行コードを消したい かみちゃん 04/5/30(日) 17:16 回答[未読]
【14483】Re:セル内の改行コードを消したい かみちゃん 04/5/30(日) 17:05 回答[未読]
【14478】Re:セル内の改行コードを消したい かみちゃん 04/5/30(日) 16:37 回答[未読]
【14486】Re:セル内の改行コードを消したい バカボン 04/5/30(日) 17:36 質問[未読]
【14488】Re:セル内の改行コードを消したい バカボン 04/5/30(日) 17:51 質問[未読]
【14490】Re:セル内の改行コードを消したい かみちゃん 04/5/30(日) 18:03 回答[未読]
【14489】Re:セル内の改行コードを消したい かみちゃん 04/5/30(日) 17:59 回答[未読]
【14491】Re:セル内の改行コードを消したい バカボン 04/5/30(日) 18:04 質問[未読]
【14492】Re:セル内の改行コードを消したい かみちゃん 04/5/30(日) 18:24 回答[未読]
【14493】Re:セル内の改行コードを消したい バカボン 04/5/30(日) 18:31 発言[未読]
【14495】Re:セル内の改行コードを消したい バカボン 04/5/30(日) 18:33 発言[未読]
【14496】Re:セル内の改行コードを消したい かみちゃん 04/5/30(日) 19:22 回答[未読]
【14497】Re:セル内の改行コードを消したい バカボン 04/5/30(日) 19:32 発言[未読]
【14498】Re:セル内の改行コードを消したい かみちゃん 04/5/30(日) 19:40 発言[未読]
【14499】Re:セル内の改行コードを消したい バカボン 04/5/30(日) 19:41 発言[未読]
【14494】キャリッジリターンとか・・・ つん 04/5/30(日) 18:31 発言[未読]
【14500】Re:セル内の改行コードを消したい Hirofumi 04/5/30(日) 21:00 回答[未読]
【14545】Re:セル内の改行コードを消したい バカボン 04/6/1(火) 10:35 お礼[未読]

【14473】セル内の改行コードを消したい
質問  バカボン E-MAIL  - 04/5/30(日) 16:11 -

引用なし
パスワード
   現在CSVファイルをエクセルで生成し、データをDBにインポートしようと
思い、CSVファイルを作成していました。

ところがエクセルファイルのデータの中に、セル内のデータ(文字列)に改行コードがあるため
そのままCSVファイルを生成しても、データが切れるという状況になってしまいます。

そこでセル内にあるデータの改行コードを削除したいのですが
それは可能でしょうか?
お手数ですがご教授お願いします。

【14475】Re:セル内の改行コードを消したい
回答  つん E-MAIL  - 04/5/30(日) 16:29 -

引用なし
パスワード
   バカボン さん、こんにちは

  With Range("a1")
    .Value = Replace(.Value, vbLf, "")
  End With

こんな感じかな?

【14478】Re:セル内の改行コードを消したい
回答  かみちゃん  - 04/5/30(日) 16:37 -

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

>そこでセル内にあるデータの改行コードを削除したいのですが

VBAを使わなくても、一般操作であれば、SUBSTITUTE関数でできます。
=SUBSTITUTE(A3,CHAR(10),"")
ただし、VBAでするならば、Replace関数で
 ActiveCell.Value = Replace(ActiveCell.Value, Chr(10), "")
のようにするとできます。

【14479】Re:セル内の改行コードを消したい
質問  バカボン E-MAIL  - 04/5/30(日) 16:41 -

引用なし
パスワード
   ▼つん さん:
>バカボン さん、こんにちは
>
>  With Range("a1")
>    .Value = Replace(.Value, vbLf, "")
>  End With
>
>こんな感じかな?

さっそくありがとうございます。
さっそく試してみたのですが、『プロッシージャーの外では無効です』
というエラーメッセージが返ってきました。
何分、初心者なのでマクロの使い方がおかしいのかもしれないのですが(^^;;
マクロの記述するところには、上記のソースのまま記述して実行させています

【14481】Re:セル内の改行コードを消したい
回答  つん E-MAIL  - 04/5/30(日) 16:55 -

引用なし
パスワード
   どもども

>さっそくありがとうございます。
>さっそく試してみたのですが、『プロッシージャーの外では無効です』
>というエラーメッセージが返ってきました。
>何分、初心者なのでマクロの使い方がおかしいのかもしれないのですが(^^;;
>マクロの記述するところには、上記のソースのまま記述して実行させています

プロシージャ内に書いてはらへんのかな?

Sub ○○()

  この間に書いてくださいね

End Sub

○○は、プロシージャ名で、適当な名前を付けてください。

Sub ○○()

  処理処理

End Sub

これで1つの単位のプログラムになります。
なので、いきなり処理のコードを何もないところに書いても
動いてくれません。
私は上手に説明出来ないんだけど、ネットで「プロシージャ」で調べると、
いろんなサイトで説明されてるので見てみてくださいね。

【14482】Re:セル内の改行コードを消したい
質問  バカボン E-MAIL  - 04/5/30(日) 17:05 -

引用なし
パスワード
   レスありがとうございます。
さっそく記述を直して実行してみたのですが
実行時エラー424
オブジェクトが必要です
とエラーが返ってきます。
ソースは下記のように記述しています。


Sub セル内改行コード削除()
SubActiveCell.Value = Replace(ActiveCell.Value, Chr(10), "")
End Sub

なにがおかしいのか?教えて頂きたいのですが?

【14483】Re:セル内の改行コードを消したい
回答  かみちゃん  - 04/5/30(日) 17:05 -

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

>さっそく試してみたのですが、『プロッシージャーの外では無効です』
>というエラーメッセージが返ってきました。
>何分、初心者なのでマクロの使い方がおかしいのかもしれないのですが(^^;;
>マクロの記述するところには、上記のソースのまま記述して実行させています

'選択したセル範囲の値から改行コードを除外する
Sub Cell_Value_vbLf_Del()
 For Each c In Selection.Cells
  With c
   .Value = Replace(.Value, vbLf, "")
  End With
 Next
End Sub
でいかがですか?
これで、あらかじめ、除外したいセル範囲を指定して、マクロを実行すればいいとできます。

【14484】Re:セル内の改行コードを消したい
発言  つん E-MAIL  - 04/5/30(日) 17:12 -

引用なし
パスワード
   >Sub セル内改行コード削除()
>SubActiveCell.Value = Replace(ActiveCell.Value, Chr(10), "")
 ↑ここちゃいますか?いらん「Sub」がはいってます。
  でも、これやと普通エラーは「変数が定義されてません」かな?
>End Sub
>
>なにがおかしいのか?教えて頂きたいのですが?

【14485】Re:セル内の改行コードを消したい
回答  かみちゃん  - 04/5/30(日) 17:16 -

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

さきほどから、コメントが、つんさんとかぶってしまい申し訳ありません。

>さっそく記述を直して実行してみたのですが
>実行時エラー424
>オブジェクトが必要です
>とエラーが返ってきます。
>ソースは下記のように記述しています。
>
>
>Sub セル内改行コード削除()
>SubActiveCell.Value = Replace(ActiveCell.Value, Chr(10), "")
>End Sub

Sub セル内改行コード削除()
 ActiveCell.Value = Replace(ActiveCell.Value, Chr(10), "")
End Sub

「SubActiveCell.Value」の「Sub」が余計です。
プロシージャ名や変数に日本語など2バイト文字はあまり使わないほうがよろしいかと思います。

でも、この方法より、以下で紹介した(元々はつんさんが紹介されたもの)ほうがいいと思いますけど。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=14483;id=excel

【14486】Re:セル内の改行コードを消したい
質問  バカボン E-MAIL  - 04/5/30(日) 17:36 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>そこでセル内にあるデータの改行コードを削除したいのですが
>
>VBAを使わなくても、一般操作であれば、SUBSTITUTE関数でできます。
>=SUBSTITUTE(A3,CHAR(10),"")
>ただし、VBAでするならば、Replace関数で
> ActiveCell.Value = Replace(ActiveCell.Value, Chr(10), "")
>のようにするとできます。

さっそく関数を埋め込んだのですが
元々あったデータ(文字列)が消えてしまいます。

VBAを使った場合も試してみましたが
Sub セル内改行コード削除()
ActiveCell.Value = Replace(ActiveCell.Value, Chr(10), "")
End Sub

というような記述で実行しましたがうまくいきません

何か実行するにあたっておかしいところはあるのでしょうか?

【14488】Re:セル内の改行コードを消したい
質問  バカボン E-MAIL  - 04/5/30(日) 17:51 -

引用なし
パスワード
   さっそく
=SUBSTITUTE(A3,CHAR(10),"")
で改行コードを削除することができたのですが
同じシート内だとまずいので、
仮に関数を埋め込む際に
データが入ってる方をシート2、表示するほうをシート1とすると
=SUBSTITUTE(A3,CHAR(10),"")
の記述はどのようになりますか?

【14489】Re:セル内の改行コードを消したい
回答  かみちゃん  - 04/5/30(日) 17:59 -

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

>元々あったデータ(文字列)が消えてしまいます。

元々あったデータから、改行コードを消したいのではないのですか?
「つんさん」も私も、そうだと思って、コメントしています。

元々のデータを残したいということなのでしょうか?
少なくともSUBSTITUTE関数の場合は、元々のデータが消えることはないと思います。
=SUBSTITUTE(A3,CHAR(10),"")
は、A3に元々のデータがあって、B3など別のセルにこの数式を書いたらその別セルに改行コードを取り除いた値が入ります。

また、VBAの場合の
Sub セル内改行コード削除()
 ActiveCell.Value = Replace(ActiveCell.Value, Chr(10), "")
End Sub
は、現在のセルの値から改行コードを除いた値を「現在のセル」に入れます。
そういう点で、SUBSTITUTE関数と異なります。

もし、別のセルでに入れたいのなら、
Sub セル内改行コード削除()
 Range("A1").Value = Replace(ActiveCell.Value, Chr(10), "")
End Sub
とすると、特定のセルに入ります。

Sub セル内改行コード削除()
 ActiveCell.Offset(0, 1).Value = Replace(ActiveCell.Value, Chr(10), "")
End Sub
とすると、現在のセルの右隣のセルに入れます。(元々のデータは消えません)

Sub Cell_Value_vbLf_Del()
 For Each c In Selection.Cells
  With c
   c.Offset(0, 1).Value = Replace(.Value, vbLf, "")
  End With
 Next
End Sub
とすると、選択した範囲の各セルの右隣のセルに入ります。
ただし、選択範囲が連続した複数列にまたがる場合は、意図しない動きになります。

【14490】Re:セル内の改行コードを消したい
回答  かみちゃん  - 04/5/30(日) 18:03 -

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

>データが入ってる方をシート2、表示するほうをシート1とすると
>=SUBSTITUTE(A3,CHAR(10),"")
>の記述はどのようになりますか?

SUBSTITUTE関数のヘルプを見ると「目的の文字列が入力されたセル参照を指定することもできます。」となっていますので、
=SUBSTITUTE(Sheet2!A3,CHAR(10),"")
などとすればいいのではないでしょうか?

【14491】Re:セル内の改行コードを消したい
質問  バカボン E-MAIL  - 04/5/30(日) 18:04 -

引用なし
パスワード
   ありがとうございます。
さっそく試してみましたところ、関数結果はうまくいきました。
しかしながら、エクセルのシート内では見た目は改行は無くなっていますが
実際は、改行コードが残っているため
CSVを生成すると、改行コードが残ったままになっています。
最終的に(セル内にある文字列の改行コード)CSVファイルを生成したときに改行コードを削除したいのです。

それは可能でしょうか?

【14492】Re:セル内の改行コードを消したい
回答  かみちゃん E-MAIL  - 04/5/30(日) 18:24 -

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

>さっそく試してみましたところ、関数結果はうまくいきました。
>しかしながら、エクセルのシート内では見た目は改行は無くなっていますが
>実際は、改行コードが残っているため
>CSVを生成すると、改行コードが残ったままになっています。
>最終的に(セル内にある文字列の改行コード)CSVファイルを生成したときに改行コードを削除したいのです。

そのシートに改行コードの入っている元のデータが残っていることはないですか?
さきほど「元のデータが消えてしまう」とのことでしたので・・・
もし、別シートに改行コードを除いたデータを反映するようにしているならば、少し考えにくい現象です。
少しサンプルを提示していただけませんか?

【14493】Re:セル内の改行コードを消したい
発言  バカボン E-MAIL  - 04/5/30(日) 18:31 -

引用なし
パスワード
   さっそくレスありがとうございます。
サンプルを提示したいと思います。
現在シートを分けて関数を使っています。
シートはSheet1 Sheet2の2つを用いて
元々のデータはSheet2に文字列データが入っています。
<Sheet1>
A     B   C          D       E
No   Pass  項目1       項目2    項目3
1   dede  皆様より
        頂きました・・・

<Sheet2>
A     B   C          D       E
No   Pass  項目1       項目2    項目3
1   dede  皆様より頂きました・・・

※今現在、Sheet2のC2に =SUBSTITUTE(Sheet2!C2,CHAR(10),"")
というように記述しています。

【14494】キャリッジリターンとか・・・
発言  つん E-MAIL  - 04/5/30(日) 18:31 -

引用なし
パスワード
   どもども

>かみちゃん さん
こちらこそ、何度も被ってすみません。
なのにまたしゃしゃりでてきたりして^^;

>そのシートに改行コードの入っている元のデータが残っていることはないですか?
>さきほど「元のデータが消えてしまう」とのことでしたので・・・
>もし、別シートに改行コードを除いたデータを反映するようにしているならば、少し考えにくい現象です。
>少しサンプルを提示していただけませんか?

もしかして、ラインフィード文字じゃなくて、
キャリッジリターンが残ってるってことはないかな?
Alt+Enterで挿入した改行は、ラインフィード文字のようですが、
これを入れて、Replaceでキャリッジリターンに置き換えたら、
セル内では改行されずに表示されますが、CSVにして、テキスト等で見ると、
改行されてしまってるようです(当たり前だけど)

全然見当違いなこと言ってるかもしれませんが・・・

【14495】Re:セル内の改行コードを消したい
発言  バカボン E-MAIL  - 04/5/30(日) 18:33 -

引用なし
パスワード
   意味が逆でした。
シート1とシート2の表示が逆になっていました
<Sheet2>
A     B   C          D       E
No   Pass  項目1       項目2    項目3
1   dede  皆様より
        頂きました・・・

<Sheet1>
A     B   C          D       E
No   Pass  項目1       項目2    項目3
1   dede  皆様より頂きました・・・

が正しいです

【14496】Re:セル内の改行コードを消したい
回答  かみちゃん E-MAIL  - 04/5/30(日) 19:22 -

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

>サンプルを提示したいと思います。
>現在シートを分けて関数を使っています。

こちらで、実際にExcelに入力して、CSV出力すると、まったく問題ありませんが・・・試しに
=SUBSTITUTE(SUBSTITUTE(Sheet2!C2,CHAR(10),""),CHAR(13),"")
としたらどうでしょうか?

ちなみに、Altキーを押しながらEnterキーでセル内改行ができますが、このときは、ラインフィールド(CHAR(10)、vbLf)になります。
しかし、改行とは、キャリッジリターン(CHAR(13)、vbCr)のものもあります。

ですから、CHAR(13)、CHAR(10)の文字が入っていれば、どちらも""とすることによって「文字なし」に置き換えることをしなければいけません。

もし、これでうまくできるとなると、さきほどのVBAも修正がいります。

あとは、実際のファイルを見てみないとなんともいえません。

【14497】Re:セル内の改行コードを消したい
発言  バカボン E-MAIL  - 04/5/30(日) 19:32 -

引用なし
パスワード
   ▼かみちゃん さん:
試しに
=SUBSTITUTE(SUBSTITUTE(Sheet2!C2,CHAR(10),""),CHAR(13),"")


というように置換えてみましたが、やはり同じ結果になりました。
きっと、今入力されているデータになんらかの問題があるかと思います。

そこでよろしければ実際のエクセルのファイルを見て頂ければ
助かるのですが?
よろしいでしょうか?

【14498】Re:セル内の改行コードを消したい
発言  かみちゃん  - 04/5/30(日) 19:40 -

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

>そこでよろしければ実際のエクセルのファイルを見て頂ければ
>助かるのですが?
>よろしいでしょうか?

さきほど、メールさせていただきました。

【14499】Re:セル内の改行コードを消したい
発言  バカボン E-MAIL  - 04/5/30(日) 19:41 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>そこでよろしければ実際のエクセルのファイルを見て頂ければ
>>助かるのですが?
>>よろしいでしょうか?
>
>さきほど、メールさせていただきました。

ただいまよりメールさせて頂きます。
よろしくお願いします

【14500】Re:セル内の改行コードを消したい
回答  Hirofumi  - 04/5/30(日) 21:00 -

引用なし
パスワード
   【14261】で

>  ダブルクォーツ無しで出力する事は、こんなコードで出来るけど
>データの中に、ダブルクォーツや、改行、カンマが有ると、
>読み込む時に、元の様に成らないよ?

といったのは、ダブルクォーツで括って有れば
Access等では、データの中に、ダブルクォーツや、
改行、カンマが有っても1フィールドとして読んでくれるので
ダブルクォーツで括ら無いのは?
と言う意味でした

もし、【14261】のコードでCsv出力するなら、以下の様な変更で
改行を削除できると思います

改修するプロシージャが1つ
追加するプロシージャが1つです

以下の様に「Function ComposeLine」プロシージャを変更して下さい


Private Function ComposeLine(vntField As Variant, _
            Optional strDelim As String = ",") As String
'  レコード作成

  Dim i As Long
  Dim strResult As String
  Dim strField As String
  Dim lngFieldEnd As Long
  Dim vntFieldTmp As Variant
  
  'もし、データが複数なら
  If VarType(vntField) = vbArray + vbVariant Then
    vntFieldTmp = vntField
  Else
    ReDim vntFieldTmp(1 To 1, 1 To 1)
    vntFieldTmp(1, 1) = vntField
  End If
  'データ数の取得
  lngFieldEnd = UBound(vntFieldTmp, 2)
  'データ数繰り返し
  For i = 1 To lngFieldEnd
    strField = PrepareCsvField(vntFieldTmp(1, i))
    '結果変数にフィール文字列を加算
    strResult = strResult & strField
    'データカウントがデータ数未満の場合
    If i < lngFieldEnd Then
      '区切り文字を結果変数に加算
      strResult = strResult & strDelim
    End If
  Next i
  
  ComposeLine = strResult
  
End Function

以下のプロシージャを追加して下さい

Private Function PrepareCsvField(ByVal vntValue As Variant) As String

' 改行コードの削除

  Dim i As Long
  Dim lngPos As Long
  Dim strSearch As String
  
  'ダブルクォーツで括るか否かの判断処理
  For i = 1 To 2
    strSearch = Choose(i, vbCr, vbLf)
    lngPos = InStr(1, vntValue, _
          strSearch, vbBinaryCompare)
    Do Until lngPos = 0
      vntValue = Left(vntValue, lngPos - 1) _
            & Mid(vntValue, lngPos + 1)
      lngPos = InStr(1, vntValue, _
              strSearch, vbBinaryCompare)
    Loop
  Next i
  
  PrepareCsvField = vntValue

End Function

【14545】Re:セル内の改行コードを消したい
お礼  バカボン E-MAIL  - 04/6/1(火) 10:35 -

引用なし
パスワード
   レス頂ありがとうございます。
自分の操作がおかしい事もあり
=SUBSTITUTE(SUBSTITUTE(Sheet2!C2,CHAR(10),""),CHAR(13),"")

上記の関数で、希望の結果を得る事ガできました。

お手数取らせてすみません。
ただ、書いて頂いた記述はマクロ登録をし今後の作業効率アップに
つなげて行きたいと思います。

いろいろとありがとうございました

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