• ベストアンサー

VBA 文字列をキレイにしたいです。

エクセルVBAでツールを作成しようとしています。 他のソフトで作成したデータなども関連するため、セルの中の文字列の先頭にシングルコーテーションが付加されてしまうケースがあるのですが、これが不要なので外したいと思います。 方法を検索した結果、以下の例を見つけました。 ---- 「'」を削除したいセルを選択してマクロを実行すると、 すべてのセルで先頭の「'」を削除します。 Sub Sample() Dim a As Range For Each a In Selection If Not a.HasFormula Then a = a Next a End Sub ---- 上記の方法だとセルを対象にしていると思うのですが、 プログラム上でセルの中身を既にstring型の変数に入れているのでその変数を用いて実現したいと考えていますが、書き換え方が分かりませんのでご教授いただけたらと思います。 宜しくお願い致します。

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

  • ベストアンサー
  • yackle
  • ベストアンサー率100% (1/1)
回答No.2

安直な回答ですが、left関数で先頭1文字を取得し、これがシングルクォーテーションだったらMid関数で2文字以降を取得、というのはどうですか? 例) hoge = "'123" If Left(hoge, 1) = "'" Then hage = Mid(hoge, 2) End If

aiching
質問者

お礼

なるほど。2段階で考えればよかったんですね。 知識が浅いためか、無意識のうちに一発で処理することばかり考えていました。 大変参考になりました。 ありがとうございました。

その他の回答 (2)

noname#7749
noname#7749
回答No.3

q=897306、914750 を参照。

参考URL:
www.okweb.ne.jp/kotaeru.php3?q=914750,www.okweb.ne.jp/kotaeru.php3?q=897306
aiching
質問者

お礼

同じ質問を探したつもりではありましたが…ありがとうございました。 そちらの方も目を通して参考にさせていただきます。

  • yackle
  • ベストアンサー率100% (1/1)
回答No.1

Mid関数を使って、変数の2文字目以降を取得するようにしてやればいいと思います。 例) hoge = "'123" hage = Mid(hoge, 2) MsgBox hage 結果)123が表示される

aiching
質問者

補足

さっそくのご回答ありがとうございます。 全てのセルについて、文字列の先頭にシングルコーテーションが付くのであればMid関数が使えるかと思いますが、付く場合・付かない場合が発生しています。 シングルコーテーションも含めて文字列として変数に取得してしまっている為困ってしまっています…。 質問が言葉足らずでした。 再度何か案がございましたらお知恵をお貸しください。

関連するQ&A

  • エクセルVBA 先頭と末尾(後尾)に文字入力する

    エクセルVBAについて教えてください (1)選択した複数のセルに文字入力がされていた場合、入力文字の先頭に*を入力させたい (2)選択した複数のセルに文字入力がされていた場合、入力文字の末尾(後尾)に*を入力させたい (3)選択した複数のセルに文字入力がされていた場合、入力文字の先頭と末尾(後尾)に*を入力させたい (1)一応、これで先頭に*が入力されました Sub test1() Dim c As Range For Each c In Selection If Len(c.Value) > 0 Then c.Value = "*" & c.Text Next End Sub (2)失敗(構文エラーになります) Sub test2() Dim c As Range For Each c In Selection If Len(c.Value) > 0 Then c.Value = c & "*".Text Next End Sub どのようにしたら、末尾に*を入力させられるのでしょうか (3)不明 (1)はできたのですが、(2)(3)はどうしたらよいか分かりません もし、(1)も変更した方が良いのであればそれも教えてください よろしくお願いします

  • vba

    下記はマクロコードの最初のほうをもってきたものですが、 TypeName(Selection) = "Range" And Selection.Value<> "" の意味を説明していただけませんか。 TypeNameとは何か (Selection)とは何か TypeName(Selection) とは何か TypeName(Selection) = "Range" とは何か Selectiionとはカーソルがさしている何か1つのセルのようなものとみていいのでしょうか。 よくTypeName(Selection) = "Range" と検索するとフィットするのですが、何のために使っているのがわかりません。どういう目的のためにTypeName() 関数というのは、使われますか。 Sub Macro1() Dim ptr As Long Dim str As String If TypeName(Selection) = "Range" And Selection.Value <> "" Then   ptr = 0

  • VBA 文字列に関して

    現在 A22のセルに入力された文字列をボタンを押せば ばらばらにしてA22のセルから順番に入れるマクロを作りました (例)A22のセルに ”こんにちわ”の文字列が入っている場合 ボタン押下   ↓ A22のセル⇒こ B22のセル⇒ん C22のセル⇒に D22のセル⇒ち E22のセル⇒わ になる。 不思議なことに数字を16文字以上いれてボタンを押し文字を分離すると入力していない文字、数字が入ってしまいます。 数字だけこういう現象が発生してしまいます。 例えば "1111111111111111"と入力して文字を分離した場合 1.11111111111111E+15と個々のセルに格納されます。 原因がわかる方、教えて頂けないでしょうか? 以下がコードです。宜しくお願い致します。 Private Sub CommandButton1_Click()   Dim one As String   Dim myString As String   myString = Cells(22, 1)   numString = Len(Cells(22, 1))   If Len(myString) <= 50 Then    For i = 1 To Len(Range("A22").Value)      one = String(1, myString)      Cells(22, i) = one      myString = Replace(myString, one, "", 1, 1, vbTextCompare)    Next i   End If End Sub

  • VBAで文字列を数値に変換したい

    A列とE列の文字列になってしまった数値を 数値に変換したく、以下のようなものを作ったのですが、 文字の無いセルまで、数値に変換しようとするので 時間がかなりかかります。 何かよい方法は無いでしょうか? よろしくお願いいたします。 Sub 数値に変換() Range("A:A,E:E").Select For Each xCell In Selection xCell.Value = xCell.Value Next xCell End Sub 使用ソフトEXCEL2000orEXCEL2003

  • 空白セルと0値を識別させたい。(VBA)

    すみません、誰か教えていただけますか。 シートの53、54、55行目にそれぞれ値入っています。 それを3行目にビジュアル的に表現させています。 55行目はセルの色で、53行目は数値があり同じ値が 続く部分の合計を出しています。 しかし、下記の記述ですと数値が0(変数D=0)の時に うまくいきません。空白セルと認識されてしまうと思います。 何か、良い方法があれば教えて頂けませんでしょうか。 宜しくお願いします。 Sub 表示() Dim a As Long Dim c As Long Dim D As Long Dim e As String Dim f As String c = 3 For a = 3 To 64 With Worksheets("Sheet1") If .Cells(53, a) <> .Cells(53, a + 1) Then .Range(.Cells(53, c), .Cells(53, a)).Select D = WorksheetFunction.Sum(Selection) e = D f = Selection(1).Offset(1, 0).Value G = Selection(1).Offset(2, 0).Value If D <> 0 Then Selection(1).Offset(-50, 0).Value = f + "//" + e .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.Interior.ColorIndex = G End If If Selection(1).Value = "" Then .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone End If c = a + 1 End If End With Next End Sub

  • エクセルVBAでグラフの範囲を設定する方法

    お世話になっています。 グラフ自体は、作成済みのものを使用して、データの範囲だけを 変更させる方法を考えています。 A列に、データが入っている範囲を選択して、選択したセル範囲を グラフのデータ範囲としたいと思います。 現在、作成したプログラムは以下のものです。 当たり前なんでしょうが、以下のものではエラーになります。 Loopコマンドで、アクティブになったセルをグラフのデータ範囲に 設定する方法を教えてください。 よろしくお願いします。 Sub グラフ作成() ' Dim 範囲 As String Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate Loop ActiveCell.Offset(-1, 0).Activate Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlUp)).Select   範囲 = ActiveCell ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SetSourceData Source:=Range(範囲) End Sub

  • エクセルVBAで特定の文字を削除したい

    選択しているセルの中に入っている文字「■」を 削除したいのですがうまくいきません。 お願いいたします。 Sub ■削除() Dim myRange As Range Dim keyWord1 As String, keyWord2 As String Dim bool As Boolean Set myRange = ActiveCell keyWord1 = "■" keyWord2 = "" bool = myRange.Replace(keyWord1, keyWord2, LookAt:=xlWhole) End Sub

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

    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つ入ってても それを一文字として認識させたいのですがエクセルでは不可能ですか?

  • VBA 文字列と数値の混在

    Excel VBA 独学中の初心者です。独学中の初心者です。 データ型に関する以下の疑問についてお答えいただける方、よろしくお願い致します。 疑問1.「文字列 & 数値」でエラーにならず、結果は文字列になるようですが、これはVBAの規則上当たり前のことでしょうか。 疑問2.InputBox関数の戻り値は、Typeを省略した場合文字列と思いますが、これを数値型の変数に代入してもエラーは発生しませんでした。これも当たり前のことでしょうか。 具体例は以下です。 ------------------ Option Explicit Sub 文字列と数値の疑問() '初期設定 Cells.Clear Range("A1").Select '本題はここから Dim i As Long Dim j As Long Dim strRange As String Dim strInput As String '------------------ '疑問1の例 i = 2 strRange = "A" & i '疑問1:文字列と数値変数(長整数型)を文字列連結演算子で連結してもエラーにならない。・・・なぜ? '結果は1つの文字列→strRange ="A2" '例 Range(strRange).Select '動作OK Range(strRange) = i '動作OK '------------------ '疑問2の例 strInput = InputBox("選択行を入力してください", , "4") 'strInputは文字列型変数 j = strInput '疑問2:数値変数(長整数型変数)に文字型変数を代入してもエラーにならない・・・なぜ? '結果は長整数型変数(数値) j=4 (Input BOX をデフォルトでOKしたとき) '例:以下の両方とも動作OK '1) strRange = "A" & strInput '文字列 & 文字列 →文字列 strRange ="A4";疑問なし Range(strRange).Select '動作OK Range(strRange) = strInput '2) Cells.Clear '確認用にクリアスクリーン Range("A1").Select '確認用にセル位置移動 strRange = "A" & j '文字列 & 数値 →文字列 strRange ="A4";疑問1と同じ Range(strRange).Select '動作OK Range(strRange) = j '動作OK End Sub

  • エクセルVBAのエラー

    よろしくお願いします。 VBA初心者のものです。 下記のコードを作成しましたが、 アプリケーション定義?がされていません というエラーが出ます。 わかりやすく教えていただけないでしょうか。 修正方法を教えてください。 0901名簿.xlsという名前の ファイルAのsheet1の 情報(ファイルBのセルBD1に日付4桁が記入されている)を ファイルBのセルA1の情報を元にファイルBのセルB1に抽出したい Sub 関数の挿入() Dim i As Long Dim あ As String Dim い As String Dim う As String あ="=VLOOKUP(A1,[" い=Range("BD1") う="名簿.xls]Sheet1!$F:$I,1,0)" For i = 2 To 50 Range("A" & i )= あ & い & う Next i End Sub

専門家に質問してみよう