• ベストアンサー

Chr(10)とCHAR(10)は同じ意味ですか?

セルに直接 ="a" & CHAR(10) &"b" と入力するのと、 Sub a() ActiveCell.Value = "a" & Chr(10) & "b" End Sub とするのでは、同じ意味ですか?

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

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

Excel のヘルプ(キーボードの F1 キー)で CHAR 関数を、VBE のヘルプで Chr 関数をそれぞれ見ると、どちらも文字コードを引数とすると書いてあります。 次の操作をしてみてください。 (1) A1、B2、C1 セルにそれぞれ =char(b2)、=code(b1)、=a1=b1 と記入、(2) B1 にカーソルを置く、(3) VBE のイミディエイトウィンドウに selection.value=vbcr とタイプして Enter、(4)(3)の「vbcr」を「vblf」や「vbcrlf」に書き換えた上で(2)と(3)を繰り返す。 VBA の改行関連の文字定数については、ヘルプ「その他の定数」に説明があります。 イミディエイトウィンドウに ?asc(vbcr)、?asc(vblf)、?asc(left(vbcrlf,1))、?asc(right(vbcrlf,1)) と打って、それぞれ Enter してみてください。

tmqkbjsiehjk
質問者

お礼

回答頂きありがとうございました。

その他の回答 (2)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

CHAR(10)はセル関数で、Chr(10)はVBA関数というだけで意味は同じです。 ただし、セルに直接CHAR(10)とした場合、セルの書式設定で「折り返して全体を表示」にしていないと折り返して表示してくれません。VBAで実行した場合は、自動で「折り返して全体を表示」にしてくれていますので折り返して表示されます。 VBAの場合 "a" & vbCrLf & "b" としたりします。個人的にはvbCrLf をお勧めします。

tmqkbjsiehjk
質問者

お礼

回答頂きありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

>同じ意味ですか? 表示される内容という意味では同じですが。。。 前者は数式で、後者は文字列になりますので厳密には違うものですね。

tmqkbjsiehjk
質問者

お礼

回答頂きありがとうございました。

関連するQ&A

  • chrにする関数・数値を求めるには?

    Sub aaa() Debug.Print Chr(65) End Sub で、Aが返ってきますが、 AをChr()で表すとどのような数値になるかはどうすれば求められますか? Sub aaa() Debug.Print Chr("A") End Sub のような感じで、数値の65を返したいです。

  • VBAについて

    いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1  ↓セルA1 ↓セルB1  5月26日   26           B1のセルはDAY(A1)にて出してます         完売  A氏     ○             Sheet2  ↓A列   ↓B列 5月  1日  ・  ・  ・  26日    ○           ←シート1の所に○が付いているとシート1セルB1と同じ  27日                  日付の隣のセルに○を入力  28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。

  • VBAプログラムについて

    VBAプログラムを本を見ながら作成していますが、はっきりいって素人です。 本に載っていないこととなるとちんぷんかんぷんで、いくつかあるプロシージャのどのプロシージャ内に記入したら良いのか分からないし、新しいプロシージャをどこに記入して良いのか分かりません。 例えば、 ----------------------------------------------------------- Private Sub CommandButton1_Click() ActiveCell.Value = TextBox1.Value ActiveCell.Offset(0, 1).Value = TextBox2.Value ActiveCell.Offset(0, 2).Value = TextBox3.Value ActiveCell.Offset(0, 3).Value = TextBox4.Value ActiveCell.Offset(0, 4).Value = TextBox5.Value ActiveCell.Offset(0, 5).Value = TextBox6.Value ActiveCell.Offset(0, 6).Value = TextBox7.Value ActiveCell.Offset(0, 7).Value = TextBox8.Value ActiveCell.Offset(0, 8).Value = TextBox9.Value ActiveCell.Offset(1, 0).Activate End Sub Private Sub CommandButton2_Click() Unload Me End Sub Private Sub Label1_Click() End Sub Private Sub UserForm_Click() End Sub Private Sub UserForm_Initialize() Range("A2").Activate End Sub ---------------------------------------------------------- テキスト入力フォームをいくつか作っており、コマンドボタン1とコマンドボタン2で入力ボタンと閉じるボタンにしています。   このプログラムでは、入力ボタンをクリックすることでデータが入力されて、入力された列のすぐ次の列の最初のセルがアクティブな状態になります。 (1)データ入力済みのエクセルシートにおいて、アクティブな状態にしたセルや列を削除したい場合、どこにどのように書けば良いのでしょうか? (2)データ入力が一度に終わらない時、途中の任意の列から入力を始めたい場合はどこにどのように書けば良いのでしょうか? 本に書かれていることは丸写しできますが、ちょっとでも違うと壁にぶつかってしまいます。 独学で勉強する時に良いと思われる方法はどんな方法なのでしょうか? おこがましいですが素人も分かりやすい説明をして頂けると助かります。 宜しくお願いします。

  • Do loopのマクロ

    以下のマクロの問題点を教えていただきたいのです。 A列を上から順番に調べて、値が10のときだけBに分岐して処理を行い(処理の内容は省略してあります)、またAに戻って、空白のセルが見つかったら処理をやめる、というマクロです。 ところが、これを実行すると空白のセルが見つかってもマクロが止まりません。何が問題でしょうか。 Sub A() Cells(1, 1).Select A: Do Until ActiveCell.Value = "" If ActiveCell.Value = 10 Then GoTo B End If ActiveCell.Offset(1, 0).Select Loop B: ActiveCell.Offset(1, 0).Select GoTo A End Sub

  • char型と言うものがまだ理解出来ません。

    まだC++を初めて間もないものですが、char型が今一理解出来ずに困っております。何方か詳しく教えて下さい。 たとえば、 unsigned char c[3] = {'A', 'B', 'C'}; unsigned char chr; chr = c[1]; とした時に、chrは204 'フ'と言うような答えとなってしまいます。素人目から見ると65 'A' と言うような答えしか予想がつきません。とにかくどういうものなのかがよく理解出来ず、参考書をみても0~255(符号無,英数字1文字),-128~127(符号有,英数字1文字)と書いてり、どのような使い方をするのかの詳細がなく困っております。詳しくご説明頂ける方よろしくお願い致します。

  • マクロよ動け

    VBA 難民です。 Excel で、左のセルが空白の場合、印刷文字を見えなくするつもりのマクロを作ってみましたが、知らん顔をされます。声の掛け方がまだよくわかってないのです。 こっちを向かせる方法を教えて下さい。よろしくお願いします。 Sub MacroWhiter() Dim a As Variant Dim b As Variant a = ActiveCell.Value b = ActiveCell.Offset(0, -1).Value '一つ左のセルの値 Range("B1").Activate 'ここから始める Do Until IsEmpty(ActiveCell.Value) '空きセルまで続ける If b = 0 Then 'ゼロの場合 ActiveCell.Font.Color = 2 '文字を白色にする ActiveCell.Offset(1, 0).Activate '下の行に移る End If Exit Do Loop '繰り返す a = ActiveCell.Value

  • Excel2016でのユーザーフォーム

    Excel2016で入力規則リスト入力のドロップダウンリストを ユーザーフォームで実現しようとしています。 セル内容を中央に表示[A]して選択[B]される様にVBAを作りました。 時々1~5行上下して選択[B]されてしまうことがあります。 セル内容は中央に表示されているため[A]は問題なく機能しています。 デバッグ用にMsgBoxを挿入[C]すると問題なく選択されます。 何が原因なのかが分かりません、どうかご指導ください。 なお、ActiveCell.Value は必ず Sheet2!A2:A1222 内に存在します。 Private Sub UserForm_Activate() Dim n As Integer n = Range("Sheet2!A2:A1222").Find(what:=ActiveCell.Value, Lookat:=xlWhole).Row - 2 ListBox1.TopIndex = n - IIf(n >= 5, 5, 0) <----[A] ListBox1.ListIndex = n <----[B] 'MsgBox n <----[C] End Sub Private Sub ListBox1_DblClick(ByVal 中止 As MSForms.ReturnBoolean) ActiveCell.Value = ListBox1.Value Unload Me End Sub

  • 列幅、行の高さを指定するマクロ

    元マクロ初心者(今はほとんど忘れています)です。 列幅、行の高さを変更するマクロを以前作りました。 セルに指定する列幅を入力するのですが、 最近100以上の値の時はスキップされることに気づきました。 100以上の値でも処理されるようにするにはどうすればよいでしょうか。 Sub 列幅変更マクロ() ' ' Macro1 Macro ' マクロ記録日 : 2004/1/31 ユーザー名 : ' 列幅の変更 ' Keyboard Shortcut: Ctrl+l ' If MsgBox("→:列幅を変更します。右の方向にセル内の数値に従って処理しています。一番右のセルに半角で「@」を終わりの印として入力してください。", vbOK) = 1 Then Do Until ActiveCell.Value = "@" If ActiveCell.Value < 100 Then If ActiveCell.Value > 0 Then Selection.ColumnWidth = ActiveCell.Value End If End If ActiveCell.Offset(0, 1).Select Loop End If End Sub Sub 行の高さ変更マクロ() ' ' Macro2 Macro ' マクロ記録日 : 2004/2/1 ユーザー名 : ' 行の高さ変更 ' Keyboard Shortcut: Ctrl+p ' If MsgBox("↓:行の高さを変更します。下の方向にセル内の数値に従って処理しています。一番下のセルに半角で「@」を終わりの印として入力してください。", vbOK) = 1 Then Do Until ActiveCell.Value = "@" If ActiveCell.Value < 100 Then If ActiveCell.Value > 0 Then Selection.RowHeight = ActiveCell.Value End If End If ActiveCell.Offset(1, 0).Select Loop End If End Sub

  • ユーザーフォームで入力するときに、値を残して訂正分だけ訂正して入力したいのですが、できません。

    マクロの初心者です。 参考書を見ながらマクロを書きましたが、ユーザーフォームからセルに書き込み後、Cmmandと、Txtに入力データを残しておいて、次は訂正部分だけを訂正して書き込みをしたいのですが、コードがわかりません。 まだマクロをほとんど理解していませんので、よろしくお願いします。 Option Explicit Public MyDlg As Boolean Sub 鳥獣入力() 'データ入力ダイアログを呼び出す MyDlg = True 'MyDlgにtrueを代入する '入力開始位置の取得 Sheets("様式1").Select Range("B9909").End(xlUp).Activate ActiveCell.Offset(1, 0).Activate 'MyDlgにFalseが代入されるまで繰り返しダイアログを表示する Do Until MyDlg = False Form鳥獣入力.Show Loop End Sub -------------------------------- Private Sub Cmd終了_Click() '「終了」ボタンクリック時の処理 'MyDlgにFalseを代入し、ダイアログを閉じる MyDlg = False Unload Form鳥獣入力 End Sub -------------------------------- Private Sub Cmd入力_Click() '入力クリック時の処理 'ダイアログのデータをワークシートに入力する ActiveCell.Value = Cmb登録種別.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Txt登録証.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmb年月日.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmb鳥獣名.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmb雌雄の別.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Txt捕獲数.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmbメッシュ番号.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmb市町村名.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Offset(1, -8).Activate Unload Form鳥獣入力 End Sub -------------------------------- 入力、書き込みはできましたがユーザーフォームにデータを残すことができません。 よろしくお願いします。

  • Excelで同一セル内に入力されているデータを他のセルに分割したい

    http://okwave.jp/qa4369634.html?ans_count_asc=20 で質問をして、何度かやりとりをさせていただいて エクセルで同一セル内に、セル内改行で1~6列ほどのデータが入力されています。 縦にデータが入力されていて、それぞれのセルにセル内改行を含み、データが入力されています。 それぞれのセル内のデータを… 例えば、A1セル内に5行入力されていたら、A2セルから入力されている行数分(ここでいうと5行)挿入し、それぞれにデータを分割して入力させたい。 かつ、B・Cセルは増えたセルにそれぞれのデータをコピーしたいと言ったら、 Sub Macro1() Dim idx, cnt As Integer Dim wkStr() As String Dim rng As Range   ActiveSheet.Copy after:=ActiveSheet   For idx = Range("A65536").End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, "A"), Chr(10)) > 0 Then       wkStr = Split(Cells(idx, "A").Value, Chr(10))       Set rng = Cells(idx, "B")       For cnt = UBound(wkStr) To 0 Step -1         Cells(idx, "A").Value = wkStr(cnt)         Cells(idx, "B").Value = rng.Value         Cells(idx, "C").Value = rng.Offset(0, 1).Value         If cnt > 0 Then           Cells(idx, "A").Resize(1, 3).Insert shift:=xlDown         End If       Next cnt     End If   Next idx End Sub といったマクロのご回答をいただきました。 これを元に、 ・データが入っているセルをA列→B列に変更 ・A列のデータはセルが増えた分だけ増やしたい ・A1に対応するデータがC1・D1に入っていた場合、対応するデータは残したまま、B列が増えただけ、列を増やしたい と変更したいのですが…。 すいませんが、宜しくお願い致します。

専門家に質問してみよう