• ベストアンサー

Excel VBAで改行マークを削除する方法

先日QNo.1801087で質問させていただいた件の続きです。 http://okwave.jp/kotaeru.php3?q=1801087 ユーザーフォームのテキストボックスに入力されたデータを複数のセルに入るように教えて頂きました。それは上手く行ったのですが、改行マークが(・)入ってしまって、その後の処理に問題が生じてしまうので、改行を削除するコードを記述しましたが、はじめの「0」が消えてしまって困ってます。  A1 942158621c9c05011020010a03020907・  A2 00054000・ Columns("A:A").Select Selection.Replace what:="" & Chr(13) & "", replacement:="" データは数字とアルファベットがランダムに並んでおり、全て文字列です。 A2のように数字のみの場合もあり、「0」から始まる時もあり、この「0」が一緒に削除されて「54000」となってしまいます。 上手く改行だけを削除し、「00054000」と文字列にするにはどうしたら良いのでしょうか。 Win2000、Office2003です。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。Wendy02です。 >http://okwave.jp/kotaeru.php3?q=1801087 >それは上手く行ったのですが、改行マークが(・)入ってしまって うまくいっていないと思います。 # そのどちらかで区切ったら、片方が残ってしまいます と前回書きましたが・・・。 TextBox の改行コードは、CrLf つまり、Chr(10) と Chr(13)と二つあります。その片方で区切れば、片方が残ると、と書いたわけです。私の書いたものは、分っていらっしゃらなかったようです。 Private Sub CommandButton1_Click()   Dim buf() As String   If TextBox1.Text <> "" Then    buf = Split(TextBox1.Text, vbCrLf)    With Range("A1").Resize(UBound(buf) - LBound(buf) + 1)      .NumberFormatLocal = "@"      .Value = WorksheetFunction.Transpose(buf)    End With   End If End Sub

ruru_gold
質問者

お礼

すみません、前回Wendy02さんのコードが難しく他の方に教えていただいた方法でやっておりました。 今回こちらで試したところできました。今後勉強いたします。ありがとうございました。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。 回答としては、#1 の方のもので良いと思いますが、前回のご質問に 絡んでコメントすると、、 1. テキストボックスで手入力した改行コードは vbCrLf = Chr(13)   -->セル内改行のあるセルの値を代入した場合は vbLf 2. セル内改行の改行コードは vbLf = Chr(10) です。改行コードで Split を使って配列にバラすときには、この 改行コードの違いに気をつけて下さい。 例えば、改行を含むテキストの変数が TEST で改行コードが vbLf なら aryTEST = Split(TEST, Chr(10)) ' Chr(10) = vbLf で配列 aryTEST にバラすと、改行コードはこの時点で消えている ハズです。 改行コードが残っているのであれば、Split に渡す改行コードが 違っていたか、他に原因がありそうです。 例えば、 vbLf と vbCrLf の混在とか。 つまり、前回のご質問では、 vbCrLf の混在する可能性を考慮し、 改行コードをそろえてから Split した方が良いかもしれません。 a = TextBox1.Text a = Replace(a, Chr(13), Chr(10)) '<--- 追加 s = Split(a, Chr(10)) みたいな感じ。 はずしてたら、スルーして下さい。

ruru_gold
質問者

お礼

ありがとうございます。参考にいたします。

  • s___o
  • ベストアンサー率35% (108/306)
回答No.1

改行を削除する前に、セルの書式設定を「文字列」にしてはどうでしょう? Columns("A:A").Select Selection.NumberFormatLocal = "@" '書式設定(文字列) Selection.Replace what:="" & Chr(13) & "", replacement:="" 動作確認をしてないので、確かめてみてください。

ruru_gold
質問者

お礼

文字列にしてもやっぱりだめでした。ありがとうございました。

関連するQ&A

  • エクセルのマクロの制限

    エクセルで以下のようなタブとスペースを削除するマクロを実行したところ Sub Tab_Clear() Selection.Replace what:=" "+Chr(9), replacement:="" Selection.Replace what:=" ", replacement:="" End Sub 上のほうは削除されるのですが後のほうの行は削除されません、制限があるのでしょうか? また全行削除する方法はないでしょうか?

  • エクセル VBA "-"ハイフンの削除

    お世話になります。 セルに含まれる文字列の中から"-"ハイフンを削除しようと思い、 Cells.Replace What:="-", Replacement:="" と記述したのですが、例えば 0-0-0-111 は 111 となってしまい、"0"も消えてしまいます。もちろん、"0-0-0-111 "は文字列です。 また、シート内の全てのセルが文字列にならなければいけないので関数式を入れることはできません。ハイフンの位置もその都度バラバラです。 よろしくお願いいたします。

  • エクセルVBAのChr(10)の挿入と削除

    宜しくおねがいします 現在結合されたセルがありそのセル内に他のプログラムから 下記の値が挿入されるようになっています。 あいうえお かきくけこ さしすせそ たちつてと (Chr(10)の改行) (Chr(10)の改行) (Chr(10)の改行) (Chr(10)の改行) 他のプログラムから送られてくる値は”あ行”の1行だけだったり ”ま行”までの7行あったりとその都度変わってきます。 文字数も”あ”の1文字だけだったり”あああいいいうううえええおおお”と 文字数も変わります。 しかし下の4行分の”Chr(10)の改行”の数は変わりません。 やりたいことは↓ コマンドボタンを二つ作り、ボタンを押すたびに下にあるChr(10)の改行を 挿入したり削除したりしたいのですがどのようにすればよいのでしょうか? 追加ボタンを2回押すとChr(10)の改行が6行分になり そこから削除ボタンを3回押すとChr(10)の改行が3行分になる・・・という感じです。 試しにマクロの記録で セルを選択して改行を削除 をしてみたのですが思うような動きをしてくれません。 なぜChr(10)なのかとかいうのは聞かないでください・・・ そこから説明すると長くなるので。

  • 【VBA】複数列を削除したい。おわかりになられる方・・・

    列の削除 '単数列の場合  Columns("C").Delete    'C列のみを削除 '複数列の場合  Columns("C:H").Delete 'C列~H列を削除 でいけることはわかるんですが、 上の例で行くとC列のみを削除を数字で列数を指定して  Columns(3).Delete でもいけますよね。 でも下の用に  Columns(3:8).Delete のように数字で列数を指定して一度に消すことはできないのでしょうか? エラーになるのですが何か特別な演算子が入りますか?

  • 取込データの改行を正しくしたい。

    SQLServerで外部のデータをインポートしたのですが そのデータの改行部分がSQLServerでは・で表示されています。 検索で調べてみて replace(列名,char(10),'') replace(列名,char(13),'') をやると・は消えるようになったのですが ・を消すのではなくSQLServerで使える改行文字に変更するには どの様にすればいいのでしょうか? 一応SQLServerのデータで改行文字を含んだ列を convert(binary,列名) を使用し改行文字を見たところ 0x0D000A00000.. となっており、0x0D000Aかなと思ってreplaceしたのですが うまく行きませんでした。

  • Excel VBA で 選択セルの一部を置換

    こんにちは。お願いします。 選択セルの文字列の右端が"号"、"番地"、"番"だったときに、それを消す、というマクロを作ろうとして、以下のようになりました。 Sub adrconv() Dim c For Each c In Selection If Right(c.Value, 1) = "号" Or Right(c.Value, 2) = "番地" Or Right(c.Value, 1) = "番" Then c.Replace what:="号", replacement:="", lookat:=xlPart c.Replace what:="番地", replacement:="", lookat:=xlPart c.Replace what:="番", replacement:="", lookat:=xlPart End If Next c End Sub お気づきかもしれませんが、これでは右端の"番"だけでなくどの"番"も消えてしまうのです。 右端の文字のみ消す方法をご教示願います。 よろしくお願いいたします。

  • エクセルVBAの修正をお願いいたします。

    下記VBAをご教授受けて何とか作りましたが、一行指定で作成したのですが、その時によりデータ数にばらつきがありますので、現状データがあるセルだけを拾ってきてデータのあるなしを、JのセルとKのセルに2種類表示するように作成したつもりですが、データがないセルにも延々と Jのセルには 1040272 Kのセルには * が表示されますのでデータが現状ないセルには何も表示されないようにしたいと思います。 自分でいろいろ調べながらしてみるのですが埒が明かない状態になっておりますので、なにとぞお助け、ご教授をお願いいたします。 わかりにくい説明で申し訳ございませんがなにとぞよろしくお願いいたします。 Range("H2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-5],RC[-4])" Selection.AutoFill Destination:=Range("H2:H10000") Range("H2:H10000").Select Columns("H:H").Select Selection.Copy Columns("I:I").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.Replace what:="-", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace what:="_", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("登録商品リスト").Select Columns("C:C").Select Application.CutCopyMode = False Selection.Copy Columns("E:E").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.Replace what:="_", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace what:="-", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Range("F2").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=UPPER(RC[-1])" Selection.AutoFill Destination:=Range("F2:F10000") Range("F:F").Select Columns("F:F").Select Selection.Copy Columns("G:G").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet2").Select Range("J2").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=COUNTIFS(登録商品リスト!C[-3],C[-1])" Selection.AutoFill Destination:=Range("J2:J1500") Range("J:J").Select Dim i As Long, endRow As Long, str As String, c As Range, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("登録商品リスト") Set wS2 = Worksheets("Sheet2") endRow = wS2.Cells(Rows.Count, "K").End(xlUp).Row Application.ScreenUpdating = False If endRow > 1 Then Range(wS2.Cells(2, "K"), wS2.Cells(endRow, "K")).ClearContents End If For i = 2 To wS2.Cells(Rows.Count, "I").End(xlUp).Row str = Left(wS2.Cells(i, "I"), 5) Set c = wS1.Range("G:G").Find(what:=str, LookIn:=xlValues, lookat:=xlPart) If Not c Is Nothing Then wS2.Cells(i, "K") = "*" End If Next i Application.ScreenUpdating = True End Sub

  • VBAによる列削除について教えて下さい

    VBA初心者です。いろいろと調べて見ましたが、「C列からアクティブセルの前列までを削除」する方法が分かりません。下の記述は「C列からX列」としていますが、X→「アクティブセルの前列」と読み替えるにはどうすればよろしいでしょうか。よろしくご指導下さい。 Sub 列削除() Columns("C:X").Select Selection.Delete Shift:=xlToLeft End Sub

  • Excel マクロ 改行数を求めたい

    いつもお世話になってます。 今Sheet1のC列のデータをSheet2のD列に移すマクロを作っていますが、 Sheet1には1~4行位のセルもあり、それを1行毎に分割してコピーしたいと考えています。 Splitで分割してみたのですが、 tmp = Split(Range("C1"), chr(10)) Sheets("Sheet2").Select Range("D9")=tmp(0) Range("D10")=tmp(1) Range("D11")=tmp(2) Range("D12")=tmp(3) といった感じにすると 改行数が1~3の場合、エラーが出てしまいます。 (実際にはC列にデーターがある分だけ上記を繰り返します。) そこで改行数を求めようとしましたが、 a = InStr(Range("C1"), chr(10)) これでは何行あっても数値(この場合は"a")が10になってしまい、うまくできません。 何かいい手段がありましたらご教授願います。 よろしくお願いします。

  • 文字列変換(置換)方法について

    Selection.Replace を利用して単体の文字を置換することはできるのですが、 例えば とあるセルに りんご+みかん+めろん っていう文字列が入力されていた場合、 Selection.Replace what:="りんご" , replacement:="" をすることによって、結果、 +みかん+めろん にすることはできますが、 ++だけにするようにはできませんでしょうか。 りんご+みかん+めろん+なし+・・・・・っと 20パターンぐらいあるので、 Selection.Replace では難しいのではと思っております。 該当の文字列だけ消す処理をしたいです。 すいませんがお願いします

専門家に質問してみよう