|
▼VBA初心者 さん:
こんにちは
とりあえず処理サンプルです。
シート上のボタンにSample をマクロ登録してください。
仮に、○○k○○○m〜○○k○○○m を入力するところを A1 としています。
○○○k○○m の ○○○や○○は全角数字でも半角数字でもOK。
また k も、全角、半角、さらに大文字、小文字 いずれでも。
○○m も 1000m 以上でもOKです。
シートも名前の順番に並んでいなくてもOKです。
Sub Sample()
Dim sh As Worksheet
Dim shN As Variant
Dim shV() As String
Dim k As Long
Dim f As Double, t As Double, n As Double
Dim v As Variant
Dim ok As Boolean
v = Split(Range("A1").Value, "〜") '★指定セルは実際のものに
If UBound(v) = 1 Then
f = getValue(v(0))
If f Then
t = getValue(v(1))
If t Then ok = True
End If
End If
If Not ok Then
MsgBox "シート範囲を正しく指定してください"
Exit Sub
End If
ReDim shV(1 To Worksheets.Count)
For Each sh In Worksheets
n = getValue(sh.Name)
If n >= f And n <= t Then
k = k + 1
shV(k) = sh.Name
End If
Next
If k = 0 Then
MsgBox "該当のシートがありません"
Exit Sub
End If
ReDim Preserve shV(1 To k)
If MsgBox("以下のシートが選ばれました。よろしいですか?" & vbLf & _
Join(shV, vbLf), vbYesNo) = vbNo Then Exit Sub
For Each shN In shV
With Sheets(shN)
'
'ここに、このシートに対する処理コードを書きます。
'たとえば以下のように。
'Range記述やCells記述の場合、先頭にピリオドをつけてください。
.Range("A1").Value = "ABC"
End With
Next
End Sub
Private Function getValue(ByVal s As Variant) As Double
Dim wk As Variant
s = LCase(StrConv(s, vbNarrow))
wk = Split(s, "k")
If UBound(wk) = 1 Then
getValue = Val(wk(0)) + Val(wk(1)) / 1000
End If
End Function
|
|