ダブルコーテーションを許可する関数

このQ&Aのポイント
  • ダブルコーテーションを許可する関数はこれで動かないでしょうか??
  • 入力フォーム中で”を記述すると次の画面では消えてしまうので関数を使ってOKにしようとかんがえました。
  • Function DoubleQuote(ByVal astrText)     Dim strCnvText Dim strChar Dim lPos strCnvText = "" For lPos = 1 To Len(astrText) strChar = Mid(astrText, lPos, 1) Select Case strChar Case "\" strCnvText = strCnvText & "" Case Else strCnvText = strCnvText & strChar End Select Next DoubleQuote = strCnvText End Function
回答を見る
  • ベストアンサー

ダブルコーテーションを許可する関数

入力フォーム中で”を記述すると次の画面では消えてしまうので関数を使ってOKにしようとかんがえました。 ダブルコーテーションを許可する関数はこれで動かないでしょうか?? Function DoubleQuote(ByVal astrText)     Dim strCnvText Dim strChar Dim lPos strCnvText = "" For lPos = 1 To Len(astrText) strChar = Mid(astrText, lPos, 1) Select Case strChar Case "\"" strCnvText = strCnvText & """ Case Else strCnvText = strCnvText & strChar End Select Next DoubleQuote = strCnvText End Function

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

2カ所文法エラーになるところがありますね。 実装すべき仕様が明確じゃないので外してるかもしれませんが、 astrText中の二重引用符1文字を二重引用符2文字に全置換したいのだったら、 Function DoubleQuote(ByVal astrText) DoubleQuote = Replace( astrText, """", """""", 1, -1 ) End Function ――で良いのでは。 ただし二重引用符のエスケープの仕方は、言語仕様により異なってます(HTMLなら実体参照、JavaScriptならバックスラッシュ前置。)ので、上記DoubleQuoteで問題が全て解消する可能性は期待薄と思われます。

関連するQ&A

  • ダブルコーテーションを全角に置換するには

    InputBoxで入力した"を、Replace関数で”にしたいのですが、 Replace(str, """", "”")をすると、コンパイルエラーになります。 Sub macro() Dim str As String str = InputBox("文字を入れてください") Debug.Print Replace(str, """", "") End Sub というマクロを作りました。 画像のように、半角のダブルコーテーション「"」を入れたら、 Replace関数で全角のダブルコーテーション「”」に変えるにはどうすればいいでしょうか? 「最初からInputBoxに全角入れればいいやん!」 は、なしにしてください。 ファイル名を作っていて、ダブルコーテーションは全角でないとつけられないのです。

  • シングルクォーテーションとダブルクォーテーションについて

    今、AccessVBAを本を見ながら勉強している初心者です。 フォームから入力されたコードに検索をしたいのですが、 Dim cnCrrDB As ADODB.Connection Dim rsKokyaku As New ADODB.Recordset ・ ・ ・ rsKokyaku.Open "Select * From 顧客マスタ Where _ 顧客コード='" & txtKokyakuCode & "'", _ cnCrrDB, adOpenStatic, adLockOptimistic とあり、[顧客マスタ]テーブルから一致する顧客コードを検索したい。っということは わかるのですが、 顧客コード='" & txtKokyakuCode & "'", のあたりの意味が、、、不明 ちなみにtxtKokyakuCodeというのは  コードを入力するための テキストボックスの名前です。 シングルクォーテーションとダブルクォーテーションを どうゆうふうに扱っているのか 教えてくださーい。 お願いします!!(わかりづらくてすみません)

  • VBA EXCEL ""の付いた文字列に""""を読み込んで""""をつける方法

    EXCELのダブルクォーテーションの付いた文字列を読み込んで""""""をCSVファイルに書き込むためにはどのように記述したらよいでしょうか? CSVファイルにデータの出力はできていますがダブルクォーテーションが一つしか入らないという状況なので分かる方がいらしたら、ご教授の程お願いします。 です。 Private Const g_cnsCOLEDIT = "77777777777777777777777777777777777777777777777777" Private Function FP_EDIT_COLUMN(SH As Worksheet, GYO As Long, COL As Long) As String Dim strTEXT As String strTEXT = Trim(SH.Cells(GYO, COL).Value) Select Case Mid(g_cnsCOLEDIT, COL, 1) Case "7" ' 自動判定(ダブルクォーテーションの付いた文字のみ「""」囲い) If strTEXT = "" Then FP_EDIT_COLUMN = strTEXT ElseIf strTEXT = g_cnsDQ Then ' ダブルクォーテーション FP_EDIT_COLUMN = g_cnsDDQ & strTEXT & g_cnsDDQ Else FP_EDIT_COLUMN = strTEXT ' その他(文字列) End Select ' カラムを加算 COL = COL + 1 End Function

  • VBAのプログラムについて

    以前、どこかのHPで以下のようなVBAのユーザー関数を見つけました。 最近になって、そのプログラムを見返したのですが、何をしているのかさっぱり覚えていません。 どなたか、教えてください。 そもそも、FEIが何の略なのかまたは何なのかわかりません。 ////////////////////////▼プログラム/////////////////////////////////////////// Function FEI(k As Double, Order As Integer) As Double Dim s As Double Select Case Order Case 1 s = (3969 * k ^ 10) / 65536 + (1225 * k ^ 8) / 16384 + (25 * k ^ 6) / 256 + (9 * k ^ 4) / 64 + k ^ 2 / 4 + 1 Case 2 s = -(441 * k ^ 10) / 65536 - (175 * k ^ 8) / 16384 - (5 * k ^ 6) / 256 - (3 * k ^ 4) / 64 - k ^ 2 / 4 + 1 Case Else End Select FEI = Application.WorksheetFunction.pi * s / 2 End Function /////////////////////////////▲ココまで///////////////////////////////////////////////////////

  • MS関数について

    MS()という関数をAccess97で作成しました。 Public Function MS(t) As String Select Case t Case "0" MS = "A" Case "1" MS = "B" Case Else MS = "" End Select End Function Access97からAccess2000への変換を行ったのですが、上記関数ではA,B,空文字を返さず、メッセージボックスで引数tを表示してしまいます。 OSはWinXP Proです。 まるで、msgbox()みたいな動きです。 色々調べましたが、MS()は予約されている訳ではないみたいでした。 調べ方が甘いのかもしれませんが、MS()関数について情報をお持ちの方、教えてください。

  • ダブルコーテーションで3度も囲ってるのですが

    vbsで電卓を起動する時 Set objWshShell = WScript.CreateObject("WScript.Shell") objWshShell.Run """CALC.EXE""" のように、CALC.EXEをダブルコーテーションで3度も囲ってるのですがなんででしょうか? VBAの場合は Sub test() Dim i As Long i = Shell("CALC.EXE") End Sub のように3重には囲わなくても起動します。

  • Excelのユーザー定義関数について。

    ネットで調べて「アルファベットのみを半角にする」というユーザー定義関数を発見し使用していますが、 この関数にある特定の文字を変換する条件を追加することはできますでしょうか。 例えば、リンゴ という文字がセル内にある場合、ミカン に変換されて表示されるという条件を下記のユーザー定義関数に加える事ができますか。 もしくは、新たに別のユーザー定義関数を作るしかないのでしょうか。アドバイスよろしくお願いします。m(_ _ )m Function ASC_A(str As String) As String Dim i As Integer For i = 1 To Len(str) If Mid(str, i, 1) Like "[a-zA-Z]" Then Mid(str, i, 1) = StrConv(Mid(str, i, 1), vbNarrow) End If Next ASC_A = str End Function

  • プログラミングVisual Basicの質問です。

    任意の数字を入力し、Len関数とMid関数を使って2進数を10進数に変換するというプログラムを作っているのですが、うまくいきません。 コードは Dim a  As Integer Dim b  As Integer Dim i  As Integer a = Val(TextBox1.Text) For i = Len(a) To 1 Step -1 If Mid(a, Len(a), 1) = "1" Then b += 2 ^ (i - 1) End If Next Label3.Text = b    End Sub 上記のものが作ったコードです。 問題点の指摘をよろしくお願いします。

  • access 自作関数をフォームで使うとき

    お世話になります。 ACCESS2000でシステムを作っています。 商品コードを年・月をコード化したものに、日付2ケタを足したものを作成する scdという関数を作り、フォームのフィールドに、表示したのですが、 #Name!?と表示されていうまくいきません。 どうすればいいですか? 関数は以下のようになっています。 Public Function scd() As String Dim hiduke As Date Dim yc As String Dim mc As String Dim dc As String Dim strtmp As String hiduke = Date '年コードを設定 Select Case Year(hiduke) Case Is = 2012 yc = "a" Case Is = 2013 yc = "b" Case Is = 2014 yc = "c" Case Is = 2015 yc = "d" Case Is = 2016 yc = "e" Case Is = 2017 yc = "f" Case Else MsgBox "年コードを追加してください" End Select '年コードを設定 Select Case Month(hiduke) Case Is = 1 mc = "a" Case Is = 2 mc = "b" Case Is = 3 mc = "c" Case Is = 4 mc = "d" Case Is = 5 mc = "e" Case Is = 6 mc = "f" Case Is = 7 mc = "g" Case Is = 8 mc = "h" Case Is = 9 mc = "i" Case Is = 10 mc = "j" Case Is = 11 mc = "k" Case Is = 12 mc = "l" End Select '日付を設定 dc = Format(hiduke, "dd") strtmp = yc & mc & dc scd = strtmp End Function

  • VBAでFunctionの使い方

    エクセルのVBAでFunctionの使い方がいまいちよくわかりません。 Function msg() Dim h As Integer h = Hour(Time) Select Case h Case Is < 12: msg = "おはようございます。" Case Is < 17: msg = "こんにちは。" Case Else: msg = "こんばんは。" End Select End Function Sub 挨拶() MsgBox msg End Sub とやってみたら一応正しく動くようですが、これであっているのでしょうか? 他の例などを見るとFunction msg()の()内にも何か入れなければならないようなのですが、わかりません。

専門家に質問してみよう