• ベストアンサー

セルの先頭文字のアポストロフィーが認識されない

Sub t() Dim s As String Range("A1").Value = "'あああ" s = Left(Range("A1").Value, 1) Debug.Print Asc(s) End Sub を実行すると、「あ」の文字コードの-32096が返ってきます。 「‘」に対する39が返ってきてほしいのですが Range("A1").Value = "''あああ" こういう状態でセルに値が入ってないと無理なのでしょうか? シングルコーテーションが1つ入ってても それを一文字として認識させたいのですがエクセルでは不可能ですか?

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

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

こんばんは。 Range("A1").Value = "'あああ" s = Left(Range("A1").Value, 1) セルに、「'」を代入すれば、書式の接頭辞にキャストされてしまいます。数式バー上では見えていますが、それは、文字列関数では取り出せません。この書式文字、VBAでは、PrefixCharacter というプロパティで表せられます。 言い換えれば、セルに代入した書式文字は、文字列ではありません。 以下のようなスタイルになるかと思います。 Sub Test1()  Dim s As String  With Range("A1")   .Value = "'あああ"   If .PrefixCharacter <> "" Then    s = .PrefixCharacter   Else    s = Left(.Value, 1)   End If  End With  Debug.Print Asc(s) End Sub

KMKIWZQX7
質問者

お礼

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

関連するQ&A

  • VBA 複数の文字のコードを一気に返すには

    Sub test1() Dim myStr As String myStr = "abc" Debug.Print Asc("a") Debug.Print Asc(myStr) End Sub このコードは、どちらも97が返るのですが、 myStrは3文字です。 3文字全ての文字コードを返すには、 Sub test2() Dim myStr As String myStr = "abc" Debug.Print Asc(Mid(myStr, 1, 1)) & Asc(Mid(myStr, 2, 1)) & Asc(Mid(myStr, 3, 1)) End Sub のようにするしかないのでしょうか?

  • セルの中の改行された文字をひとつづつ取得したい

    図のように A1には「あ」「い」「う」が改行されて入っています。 Sub test() Dim moji(3) As String moji(1) = Range("a1").Value moji(2) = Range("a1").Value moji(3) = Range("a1").Value End Sub というコードを書いた時、 moji(1) ="あ" moji(2) ="い" moji(3) = "う" としたいのですが すべて"あいう"になってしまいます。 実現させるにはどうすればいいでしょう? アドバイスよろしくお願いします。

  • エクセルvbaで月と文字の組み合わせで月を進める

    vbaで月を進めたいのですが、文字と組み合わせると「型が一致しません」というエラーが出ます。 どうすればよいですか? 下記コードでは、 & s1 という部分がなければvba実行の度に1~12を順番に繰り返します。 しかし、文字と組み合わせるとエラーになります。セルの書式設定と組み合わせればやりたいことは実現できますが、vbaのみで行うには、下記のどこを修正すればよいでしょうか? よろしくお願いいたします。 Sub 月を進める() Dim s1 As String s1 = "月" Range("A1") = Format(DateAdd("M", 1, Format(Left(Range("A1").Value, 2), "0-00")), "m") & s1 End Sub

  • 「ぺ」って何?

    エクセルVBAなのですが、半角にできない文字があったのにで調べてみたのですが よくわかりません。 Sub a() Debug.Print StrConv("ぺ", vbNarrow) End Sub をしても半角になりません。 でも Sub b() Debug.Print StrConv("ペ", vbNarrow) End Sub なら半角になります。 Sub a1() Debug.Print Asc("ぺ") End Sub Sub b2() Debug.Print Asc("ペ") End Sub のように文字コードを調べてみたのですが -32040 -31879 が返りました。 半角にできないほうの-32040 は、なんなのでしょうか? カタカナではないのですか?

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • midステートメント セルを指定したい

    エクセルなのですが、 Sub N文字目を置換する1() Dim N As Long Range("a1").Value = "abcde" N = 2 '置換する文字の位置 ’start(省略不可) Mid(Range("a1").Value, N) = "X" MsgBox Range("a1").Value End Sub このように、セルを指定することはできないのでしょうか? このコードを実行しようとすると、 Mid(Range("a1").Value, N) = "X"の部分で「変数が必要です」とコンパイルエラーになります。 Sub N文字目を置換する2() Dim moji As String Dim N As Long Range("a1").Value = "abcde" moji = Range("a1").Value N = 2 Mid(moji, N) = "X" MsgBox moji End Sub このように、セルの値を一度変数に入れると問題なく実行できますが、 なぜダイレクトにmidステートメントでセルを指定できないのかわからないので教えてください。 よろしくお願いします。

  • 配列のメリットは?

    下記のコードは同じ動作をします。 Sub 普通() Dim moji1 As String Dim moji2 As String moji1 = Range("a1").Value moji2 = Range("a2").Value MsgBox moji1 & moji2 End Sub --------------------------------------------- Sub 配列() Dim moji(2) As String moji(1) = Range("a1").Value moji(2) = Range("a2").Value MsgBox moji(1) & moji(2) End Sub こういう場合は配列を使ったほうがいいのでしょうか? それとも配列は避けたほうがいいのでしょうか?

  • 文字列の最後が空白なら削除する

    Sub test() Dim mystr As String mystr = "abc " If Right(mystr, 1) = " " Then Debug.Print Left(mystr, Len(mystr) - 1) End If End Sub これで、最後の1文字が空白なら削除できるのですが、 "abc "のように、最後に空白が2つある場合が対応できないのですが そういう場合でも対応できるコードはありますか?

  • セル値のシート参照

    excel2010 セル値のシート参照がうまく動作しません。 構成は下記です。 ディスクトップにa.xlsmのファイル。シート名称はSheet1、シート計算は手動にしています。 Cドライブのtempフォルダにabc.xlsというファイルを登録しています。 C:\TEMP\abc.xls abc.xlsのファイルは、シート名称が(日付け)という構成です。 9/1だと(1)、9/23だと(23)の様になっています。 a.xlsmのファイルからマクロを使い、日付けに相当するシートを表示させようとしています。 a.xlsmのQ2セルには日付けのデータが入ります。表示形式は9/23みたく。 Q3セルは、="("&TEXT(Q2,"dd")*1&")" これで、日付けからabc.xlsファイルのシート名称を参照させる構成です。 作成したマクロは下記です Sub マクロからブックを開く2() Worksheets("Sheet1").Activate Dim t As String t = Range("Q3").Value Debug.Print t ’Q3セル値を更新させる為に計算実行 Calculate Workbooks.Open "C:\TEMP\abc.xls" Worksheets(t).Activate End Sub 上記だと、Q2セルの日付けを変えても1つ前の日付けで参照されます。 上記を2回そのまま実行すると正しく反映されます。 Debug.Print tでも更新されていないのが分かります。 なぜなのでしょうか? ちなみに、下記の様にマクロを分割すると、正しく表示されます。 Sub マクロからブックを開く() Worksheets("Sheet1").Activate Dim t As String t = Range("Q3").Value Debug.Print t Calculate cal End Sub Sub cal() Dim t As String t = Range("Q3").Value Debug.Print t Workbooks.Open "C:\TEMP\abc.xls" Worksheets(t).Activate 'Call カレントフォルダの表示 End Sub 上記の様に2つに分けると Debug.Print tで更新されていることが確認出来ます。 1つ目のマクロ マクロからブックを開く2 のおかしな内容の理由と対策内容を教えていただきたく、よろしくお願いします。

  • Replace関数 大文字小文字を区別したい

    エクセルVBAについて質問いたします。 Sub test23() Dim 文字列 As String 文字列 = "Aa" Debug.Print Replace(文字列, "A", "b") End Sub を実行すると戻り値は、bbなのですが、大文字小文字を認識して置換する方法はありますか? 上記の例で例えるのなら、「A」なら「B」に置換したいので 「a」は、「A」ではないので、置換させたくないのです。

専門家に質問してみよう