• ベストアンサー

VBAプログラミング 改行について

教えてください。 下記のような改行をさせる関数を作成しました。 そのこの関数を読み込みさせ、データをあるセルに貼り付けるように指示したのですが、うまくいきません。デバックをすると、値は取得できているのですが、セルの貼り付けがおもうようにいきません。 セルが結合セルだからだめなのでしょうか?? 値は#VALUEになります お知恵をお借りできませんか? エクセルには下記のように記入しています。 =kaigyou("ああああ\nあああああああ") **************************************************** Function kaigyou(a) Dim b As String 'Excelのファイル名を変更の場合は↓これも変更して! Const file_name = "test.xls" 'シート名を変更の場合は↓これも変更して! Const print_sheet = "Sheet1" '特典内容の改行 b = Replace(a, "#n", vbCrLf) Workbooks(file_name).Worksheets(print_sheet).Cells(4, 25).Value = b End Function **********************************

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

  • ベストアンサー
回答No.3

(1)\nと、#n のスペルミスを修正すること。 (2)ただしいFunctionの書き方にすること。   Function名に、returnする。(これはNo1の回答者さんが   言っていることでもある)    無駄も省けば、  Function kaigyou(a) As String   kaigyou = Replace(a, "\n", vbCrLf)  End Function  のたった3行を標準モジュールに貼り付けて保存すれば足りる。 (3)セルの書式を「折り返して全体を表示する」にすること。

aiurai54
質問者

お礼

できました!!ありがとうございます。 ただ、改行はできたのですが、なぜか”・”が表示されてしまいます。

その他の回答 (3)

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.4

こんにちは、#2です。  "・"は「Cr」ではないでしょうか。「Lf」だけにすれば消えませんか?  (前回のリンク先にもあるように、Excelのセル内改行はCrLfではなく、Lfです。) では。

aiurai54
質問者

お礼

お手数おかけしてすみません。 ありがとうございます。 できました!!

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.2

こんにちは。  Excelと改行についてマクロのサンプルが載っているサイトがありましたので、ご参照下さい。  http://officetanaka.net/excel/vba/tips/tips89.htm では。

aiurai54
質問者

お礼

こんにちは。 お礼が遅くなって申し訳ないです。 サンプルありがとうございます。 ただ、少しうまくいきませんでした。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

ワークシート関数(自作関数)として利用する場合は制限があります。 他のセルの参照や変更、関数が受取った値の変更の変更は許可されません。

aiurai54
質問者

お礼

そうなんですね。。 制限があるのですね。 早々と回答いただき、ありがとうございます。

関連するQ&A

  • VBA セル内の改行を取り除くには?

    セルの値を Workbooks(rb).Sheets(rs).Cells(rr, rc).Value で取得しています。 読み出しているセルには、改行コードが入っています。 改行コードは vb_lf でしたっけ? これを取り除くにはどうすればいいでしょうか? trim関数じゃないし、replaceとかsubstituteとかありましたっけ?

  • vba 自作関数

    Function zei(myRng As Range) As Double Dim c As Range Dim goukei As Double 'Volatileについて 'シート内のどこかのセルを参照しているものとする 'シートのどこかに変更があったらそのセルが自動的に再計算される Application.Volatile goukei = Application.WorksheetFunction.Sum(myRng) zei = Int(goukei * 5 / 100) End Function これを標準モジュールに貼り付けてワークシート上で関数を呼び出し、 100を入れると#VALUE!が返るのですがどうしてでしょうか? 違う値を入れても必ず#VALUE!が返ります。

  • エクセルVBAで関数が入った空白セルの取得

    エクセルVBAで下記のようなセルの参照をしたいのですが、よろしくお願いします。(エクセル2002です)   A  B  C  D  E  F 1 78 80 セル(A1)(B1)には値も関数も入れられています。 セル(C1)(D1)(E1)には値は入っていませんが、ワークシート関数が組み込まれており空白となっています。(関数の""にて空白) セル(F1)には何も入力されていません。 今回はセル(B1)の80の値を取得できるようにVBAで下記のようにコードを組みました。 Range("F1").End(elToLeft).Activate そうすると、セル(E1)に関数があるために(?)(E1)がアクティブな状態となります。 関数が入力されていても空白として(B1)をアクティブな状態にするために良い方法はありますでしょうか? 誠に申し訳ございませんが、よろしくお願いします。

  • エクセル上のVBA

    当方、VBAまるっきり初心者です(触りはじめて3日くらい)。 エクセルはある程度理解しているつもりですが… バージョンはエクセル2000です。 他シートのセルのひとつに入力すれば、 別シートのセルがそれを参照したうえで 値として表示出来るようにならないでしょうか。  今のところ、以下のような状況です。 step01 sheet1のセルA1に任意の数値(整数限定です)を入力。 step02 sheet2のセルA1に、sheet1のセルA1の数値を用いて     MOD関数で余りを出す。 step03 sheet2のセルB2に以下のVBAによって     step02の余りを値として表示。      Private Sub Worksheet_Change(ByVal Target As Range)        Range("b2").Value = Range("a1")      End Sub  これだとsheet1の数字を変えても、 sheetの切替後sheet2のセルB2に 表示される値が変わってくれません。  最初の入力(step01の入力)をおこなえば sheet2のセルB2まで値が変わってくれるような方法を 教えていただけないでしょうか。  拙い説明で申し訳ありませんが、よろしくお願いします。

  • ワークシートの内容をテキストファイルに書き込む際に、テキストファイルでは改行が”↑”と表示されるだけで困っています

    エクセルのデータをテキストファイルに出力させたいのですが、テキスト出力の際に"↑"が表示されるだけで改行がうまくできません。 マクロの組み方でアドバイスをいただけないでしょうか? ------------------------------ <↓具体的に、、、、。> ・エクセルデータは、同一セル内に改行させたデータがあります。      列A   列B   行1 No,1  1-111111              1-1111       行2 No,2  2-2222    ←セル"B1"と"B2"のデータを     2-22222    テキストでも改行させて表示したい。 ・テキストでは、下記のように出力させたい ◆No,1 1-111111 1-1111 ◆No,2 2-2222 2-22222 ---------------------- <↓私が試しているコードです。> 'Test.txt 開く Open "C:\Test.txt" For Output As #File_Number '列Aのセルに空白文字列が入るまで、処理を繰り返す i = "3" Do While Worksheets("sheet1").Cells(i, 1) <> "" Print #File_Number, "◆" & Cells(i, 1) Print #File_Number, Cells(i, 2) i = i + 1 Loop 'Test.txt を閉じる Close #File_Number このマクロだとテキストでは ◆No,1 1-111111↑1-1111 ◆No,2 2-2222↑2-22222 となります。 アドバイスの程、よろしくおねがいします。

  • Excel VBA-改行について

    Excel VBAで、UserFormのTextBoxに入力されたものをワークシートに表示させたいのですが、 TextBox内で、「Enter」キーが押されたら改行する方法と TextBoxで入力された通り(改行等)にワークシートのセルに表示する方法を どなたか教えて下さい。

  • エクセルの関数にてセル内改行→3行目を抜きたい

    エクセルシートのセル内改行が入っているセル(b2)から 2行目→(c2) 3行目→(d2) 4行目→(e2) と別のセルに抜きたい場合、どのような関数を書いたらよいのでしょうか。 もしくは 2行目が存在する 3行目が存在する 4行目が存在する ということがわかるだけでも良いです。 改行[0D0A]でした。 どなたか教えてください。お願いします。

  • VBAのwav操作ついて!!

    エクセルのVBAでプログラムを作っているのですが、wavを操作することに関してわからないことがあります。 (general)に -------------------------------------------------------- Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Private Const FILE001_NAME As String = "C:\001.wav" Private Const FILE002_NAME As String = "C:\002.wav" ・・・ ------------------------------------------------------- というのを入れていまして、音を出したいところで Call mciSendString("play """ & FILE○_NAME & """", "", 0, 0) という方式でwavを再生させようと思っています。 ここで、FILEのあとをワークシート1上のA1セル上の数字に変えたいと思います。つまり、A1セル内の数(乱数で1~100のいずれかを表示させています)を○のところに入れるにはどうすればいいでしょうか? どなたかおわかりになる方、教えてください。お願いいたします。

  • エクセルVBAを利用してワークシート名を変更するには

    エクセルVBAを利用してワークシート名を変更するには Sub ~~() Worksheets("sheet1").Name = "新しい名前" End Sub と文献にはあるのですが ワークシート上の名前変更のための コマンドボタンをクリックしたら ある場所のセルの値が名前になるように設定したいのですが どのようにすればいいのでしょうか?? いちおうわからないなりに予想したのは Sub シートの名前変更() ActiveSheets.Name = Range("Z3").Value End Sub これでZ3の値を名前に設定できるのではと思ったのですが うまくいきませんでした

  • ExcelのVBAでセルに指定したユーザ関数につい

    ExcelのVBAのユーザ関数について 例えば、 Excelのあるセル、例えば、C1セルの値を引数として、「Function 練習()」 という、ユーザ関数に渡します。 関数内では、引数で渡されてきた値のセル番号を判断し、その次のセルに 値を設定します。 つまり、C1セル(1,4)の値をわたしているので、D1セル(1,5)に値を 設定したいのですが、うまくいきません。 「1つ以上の循環参照が発生しています。循環参照とは、数式が直接的 または間接的に自身のセルを参照している状態を指します。これにより、 計算が正しく行われない可能性があります。 循環参照を削除または変更するか、数式を別セルに移動してください。」 が最初に表示されますが、その後、期待した結果になっていません。 何が起きていて、何がたりないのでしょうか。 よろしくお願いします。 ■内容 A B C D 1 111 222 あ =練習(C1,"-") 2 333 444 い 3 555 666 う 4 777 888 え 5 999 000 お ■関数 Function 練習(myTar As Range, word As String) As String If Len(myTar) = 0 Then 練習 = "" Exit Function End If On Error GoTo era CurRow = myTar.Row CurCol = myTar.Column MsgBox CurRow & ":" & CurCol & ":" & Cells(CurRow, CurCol) Cells(CruRow, CurCol + 1) = "a" 練習 = "○" Exit Function era: 練習 = "#VALUE!" End Function

専門家に質問してみよう