いつもこちらの識者の方々にはお世話になっています。
VBAの質問です。
IF構文でorを使って複数条件を指定したいのですが、下記のような場合、冗長な気がします。
Sub test()
IF Left$(Cells(1, 1), 1) = "あ" or Left$(Cells(1, 1), 1) = ”い" or Left$(Cells(1, 1), 1) = ”う" Then
Cells(1, 1).EntireRow.Delete
End Sub
条件式で範囲が同一の場合、例えば
IF Left$(Cells(1, 1), 1) = ”あ","い","う" Then
Cells(1, 1).EntireRow.Delete
のように、もっとスッキリした記述方法はありますでしょうか。
No.7
- 回答日時:
ご質問の趣旨からはちょっとずれるかもしれませんが。
皆さんが教えてくださっているアイディアに加えて、良かったら次のこともご参考になさってください。必要はなくても、あえて変数を宣言して放り込んでおくと、文字数が減ってスッキリしたり、分かりやすくはなると思います。
Dim rng As Range
Dim cap As String
Set rng = Cells(1, 1)
cap = Left$(rng, 1)
If cap Like "[あいう]*" Then rng.EntireRow.Delete
あとご質問の処理の内容では出す余地がなさそうですが、With ステートメントを使うと、行数は増えますが 1 行中の文字数が減ってスッキリします。
With Worksheets(1)
.Range("a1").Value = .Range("b1").Value & .Range("c1").Value
With .Range("e1")
If .Value = 0 Then .ClearContents
End With
End With
省略形の「Range("e1") = 0」ではなく、「Range("e1").Value = 0」というふうに考えれば、With により「Range("e1")」を書かないことができるという点に注意してください。
1度しか使わないコードは宣言しなかったんですが、たしかに宣言したほうが見やすいこともありますね。
参考にさせていただきます。
ありがとうございます。
No.6
- 回答日時:
例えば、
Sub Sample()
Select Case Left$(Cells(1, 1), 1)
Case "あ", "い", "う"
MsgBox "処理1"
' Case Else
' MsgBox "処理2"
End Select
End Sub
こんなのもアリかもしれないですね。
まだ冗長と言われるかもしれませんが。
select caseで一文字目を判別するんですね。
ワークシート関数も色んなやり方があって面白いと思ったんですが、VBAはそれ以上に方法が多彩ですね。
ありがとうございます。
No.3
- 回答日時:
IF Inchars("あ,い,う", Left$(Cells(1, 1), 1)) Then
と書くことも可能。
ただし、標準モジュールに次の関数を追加する手間があります。
Public Function Inchars(ByVal Text As String, ByVal C As String) As Boolean
Inchars = CBool(InStr(1, Text, C, vbBinaryCompare) > 0)
End Function
No.2
- 回答日時:
ふつーに「マクロ的」には,例えば次のように「1つずつ検査」を必要なだけ繰り返して実現するような手です。
sub macro1()
dim x as string
dim a as variant
dim h as variant
x = left(range("A1"), 1)
a = array("あ","い","う")
for each h in a
if h = x then
msgbox "FOUND"
exit sub
end if
next
msgbox "NOT FOUND"
end sub
敢えて奇を衒うなら
sub macro2()
dim res as variant
res = filter(array("あ","い","う"), left(range("A1"), 1))
if ubound(res) = -1 then
msgbox "NOT FOUND"
else
msgbox "FOUND"
end if
end sub
みたいな事もできますが,だから何?ってカンジはします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Visual Basic(VBA) VBAの繰り返し処理表記と複数の処置条件について 1 2023/01/23 20:08
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
MicrosoftOfficeの1ユーザー2...
-
MicrosoftOffice2019なんですが、
-
Excel 日付を比較したら、同じ...
-
Microsoft365の「お支払いを更...
-
ウィンドウィズ メモ帳で日付だ...
-
Excelで空白以外の値がある列の...
-
エクセルのシフト表を簡単にGoo...
-
理由を教えてください。
-
VBA
-
web上にあるエクセルをショート...
-
バソコンが二台とも壊れ後換装...
-
【マクロ】文字を1文字づつ、...
-
Excelのセルの重複チェックが出...
-
マイクロソフト 一時使用コード...
-
office365って抵抗感ないですか?
-
Outlook 電源OFFの受診の仕方
-
エクセルで例えば、A1に㈱ベ...
-
自分の専門分野の仕事。初見で...
-
excelの画面のグリッド線の消滅。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
【スプレッドシート】指定の日...
-
英数字のみ全角から半角に変換
-
会社PCのメールが更新されない
-
マイクロソフト 一時使用コード...
-
Office 2021 Professional Plus...
-
エクセルで例えば、関数を使っ...
-
Microsoft Formsの「個人情報や...
-
1つのPCに「Excel 2010」「Exc...
-
エクセルで例えば、A1に㈱ベ...
-
理由を教えてください。
-
エクセルでXLOOKUP関数...
-
マイクロソフト オフィスについて
-
VLOOKUP関数について
-
teams設定教えて下さい。 ①ビデ...
-
Googleのスプレッドシートでシ...
-
【Excel VBA】PDFを作成して,...
-
Microsoft365で写真をアルバム...
-
Outlook で宛先が複数の場合の人数
-
Excel テーブル内の空白行の削除
おすすめ情報