- ベストアンサー
文字列の最後が空白なら削除する
MarcoRossiItalyの回答
そうですね。No.1 さんのおっしゃるとおり RTrim 関数を使えば、一発で終わりですね。失礼しました。ベストアンサーは辞退します。 一応、No.2 の修正版も載せておきます。 Sub test() Dim mystr As String Dim i As Integer mystr = "abc" For i = 1 To 5 mystr = mystr & " " Next i mystr = mystr & "★★★" Debug.Print mystr mystr = Replace(mystr, "★★★", "") Debug.Print mystr Debug.Print RTrim(mystr) End Sub
関連する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 のようにするしかないのでしょうか?
- ベストアンサー
- オフィス系ソフト
- 数値かどうかを取得したい IsNumberではダメ
Sub Macro2() Dim mystr As String mystr = "1" If IsDate(mystr) = False Then MsgBox "NO" End If End Sub これなら日付型かどうかを取得できるのに、 Sub Macro1() Dim mystr As String mystr = "1" If IsNumber(mystr) = False Then MsgBox "NO" End If End Sub だと、IsNumberがコンパイルエラーになります。 変数に入っている値が数値として評価できるかを取得する方法を教えてください。
- ベストアンサー
- オフィス系ソフト
- リストにある文字が検索列にあれば印
A列にリストがあり、C列のセル内に リストの5桁の数字があれば、C列にチェック(字を赤くするなど)が入り確認が可能になるマクロを組みたいです。下記はネットで探してきて、コピーして動かしたのですが、End ifに対するifがありませんが出て、その後Loopに対するForがありません、と出ました。 下記は合ってますか? Sub Sample1() Dim i As Long, k As Long, myStr As String Dim myFound As Range, myFirst As Range For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row myStr = Cells(i, "A") Set myFound = Range("C:C").Find(what:=myStr, LookIn:=xlValues, lookat:=xlPart) If Not myFound Is Nothing Then Set myFirst = myFound GoTo 処理 Do Set myFound = Range("C:C").FindNext(after:=myFound) If myFound.Address = myFirst.Address Then Exit Do GoTo 処理 処理: For k = 1 To Len(myFound) If Mid(myFound, k, Len(myStr)) = myStr Then myFound.Characters(Start:=k, Length:=Len(myStr)).Font.ColorIndex = 3 End If Next k Loop End If Next i End Sub
- ベストアンサー
- Visual Basic
- エクセルVBAで任意の文字列を抽出するには・・・
エクセル2003で作成した住所録があります。 県名(3文字)のみを抽出して、新たに設けたD列に表示させたいと考えています。 Sub 県名の列作成() Dim myStr As String myStr = ActiveCell.Value Range("D2").Value = Left(myStr,3) End Sub ここまで、できたのですが・・・・ B列の2行目から順に処理をして、一覧表の最後まで行って、 空白セルの行が見つかったら終了させる方法が分かりません。 どうかよろしくお願いします。
- ベストアンサー
- Visual Basic
- 変数の中身がアルファベットだけなのか取得するには
変数がアルファベットだけか取得するには? Sub test() Dim mystr As String mystr = "abc" If ??? Then MsgBox "アルファベットだけです" End If End Sub のように、変数の中身がアルファベットだけなのか取得するにはどうすればいいでしょうか? ひらがな、カタカナ、漢字、記号を含んでいるかどうかを評価したいです。
- ベストアンサー
- Excel(エクセル)
- VBA 変数にアスタリスクが含んでるかどうか
変数にアスタリスクが含んでるかどうかをIFステートメントで取得するには? Sub test() Dim mystr As String mystr = "*/" If mystr Like "*" Then MsgBox "mystrはアスタリスクを含んでます。" End If End Sub このようなことをしたい場合、 mystr = "*/" でも mystr = "/" でも、結局は*が、どの文字でも含まれると認識してしまいます。 変数にアスタリスクが含まれてるかどうかを判定する方法を教えてください。
- 締切済み
- オフィス系ソフト
- エクセルVBAの文字列操作について2
エクセルVBAの文字列操作について2 以前、こちらでご教授いただいた以下のような文字列操作方法があります。 この方法ですと例えば[1-3]から3をひいた際に"1-2"と表示されますが 今回は連続する数字が2つの場合は1,2と表示させ3つ以上の場合は-でつないで表示させたいと思います。 一週間ほど考えたのですが解決できませんでした。 どなたかご協力お願いいたします。 質問内容 例えば、[1-10,15-20,22-38]と入っているセルがあるとします。 このセルに数を足したり引いたりしたいのです。 例えば、このセルから”5”を引いて[1-4,6-10,15-20,22-38]と表示したり、 "21"を足して[1-10,15-38]と表示したい。 いただいたご回答 A1 セル に「1-10,12,15-20,22-38」と入力されているとして、別のセルに =NUMORDER(A1,-5) と入力すると「1-4,6-10,12,15-20,22-38」と表示し =NUMORDER(A1,21) と入力すると「1-10,12,15-38」と表示します。 1つ目の引数には「セル番地」または「文字列」を、2つ目の引数には「1 ~ 99 までの整数」をお入れください。 Function NUMORDER(myStr As Variant, num As Integer) As String Dim i As Long Dim j As Double Dim myNum As Variant '文字列中の スペース を削除 myStr = Replace(myStr, " ", "") '文字列の前後に「0」・「100」を挿入 Select Case Left(myStr, 2) Case "1,", "1-" myStr = myStr & ",100" Case Else myStr = "0," & myStr & ",100" End Select '文字列を カンマ で分割し、ハイフン の区間の数字を補完する myStr = Split(myStr, ",") For i = 0 To UBound(myStr) If InStr(myStr(i), "-") > 0 Then myNum = Split(myStr(i), "-") myStr(i) = "" For j = myNum(0) To myNum(1) myStr(i) = myStr(i) & " " & j Next myStr(i) = Trim(myStr(i)) End If Next '欠番に「●」を入れ、「数を足したり引いたり」する myStr = Split(Join(myStr)) For i = 0 To UBound(myStr) - 1 myStr(i) = myStr(i) & Application.WorksheetFunction.Rept(" ●", myStr(i + 1) - myStr(i) - 1) Next myStr = Split(Join(myStr)) If num > 0 Then myStr(num - myStr(0)) = num Else myStr(-num - myStr(0)) = "●" End If '前後に挿入した「0」・「100」を削除 myStr = Replace(Join(myStr), " 100", "") If Left(myStr, 2) = "0 " Then myStr = Right(myStr, Len(myStr) - 2) '連続数字を ハイフン で繋ぐ myStr = Split(myStr, "●") For i = 0 To UBound(myStr) If myStr(i) <> " " Then myNum = Split(Trim(myStr(i))) If UBound(myNum) > 0 Then myStr(i) = myNum(0) & "-" & myNum(UBound(myNum)) End If End If Next 'カンマ で文字列に分割する myStr = Application.Trim(Join(myStr)) NUMORDER = Replace(myStr, " ", ",") End Function
- 締切済み
- オフィス系ソフト
- 指定した文字列が含まれる行を削除する
データの照合をしています。 指定した文字列が、「O列」に入っていたら、その行を削除し、 行をつめる というようなマクロを組みたいのですが、エラーがかかってしまいます。 (下のVBは、ネットで公開されていたのを使用させていただいております。) Sub Macro1() Const col As String = "A" '文字列が入力されている列 Dim idx As Long Dim keyWord keyWord = Application.InputBox("削除対象の文字列は?", Type:=2) If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1 If InStr(Cells(idx, col).Value, keyWord) > 0 Then ' If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then Rows(idx).Delete End If Next idx End If End Sub 「下から3行目のNEXTに対応するforがない」とエラーがでます。 ご教授、お願いいたします。
- ベストアンサー
- オフィス系ソフト
- 角カッコが含まれてるかどうかをlikeで取得
したいのですが、どうやらエラーになるようです。 Sub test() Dim mystr As String mystr = "[test]" If mystr Like "*[*" Then MsgBox "[が含まれます" End If End Sub だと、実行時エラー93 パターン文字列が不正ですになります。 こういうように各カッコが含まれてるかどうかを取得するにはどうすればいいですか?
- ベストアンサー
- オフィス系ソフト
- 文字列操作
VB6です。 質問させてください。 ↓例、Buffer変数に取得データが入ります 最終的に下記の3つの値を取得したいです。 Value(1) = "ABC" Value(2) = "DEFGHIJKL" Value(3) = "MN" 少し長いと思います。スマートな方法はございますか? ----- Dim Buffer As String Dim Temp1 As String Dim Temp2 As String Dim Value() As String Buffer = "?ABC-?DEFGHIJKLMN-" '取得データ '前後?-を除きます。 Temp1 = Right(Temp1, Len(Buffer)-1) Temp1 = Left(Temp1, Len(Temp1)-1) 'この時点で、4文字目、5文字目の-?を除きます Temp1 = Left(Temp1, 3) Temp2 = Right(Temp1, 11) '"ABCDEFGHIJKLMN"を取得 Value = Temp1 & Temp2 '"ABC"を取得 Value(1) = Left(Value, 3) '"DEFGHIJKL"を取得 Value(2) = Right(Value(2), Len(Value)-3) Value(2) = Left(Value(2), Len(Value)-2) '"MN"を取得 Value(3) = Right(Value, 2)
- ベストアンサー
- Visual Basic
お礼
回答ありがとうございました。