Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10777 / 13644 ツリー ←次へ | 前へ→

【19899】Select Caseの文をすっきりさせたいのですが みもざ 04/11/18(木) 20:47 質問[未読]
【19900】Re:Select Caseの文をすっきりさせたいので... Hirofumi 04/11/18(木) 21:16 回答[未読]
【19901】Re:Select Caseの文をすっきりさせたいので... Hirofumi 04/11/18(木) 21:30 回答[未読]
【19903】Re:Select Caseの文をすっきりさせたいので... みもざ 04/11/18(木) 21:42 お礼[未読]
【19902】Re:Select Caseの文をすっきりさせたいので... みもざ 04/11/18(木) 21:34 質問[未読]
【19948】Re:Select Caseの文をすっきりさせたいので... Kein 04/11/19(金) 20:48 回答[未読]

【19899】Select Caseの文をすっきりさせたいので...
質問  みもざ  - 04/11/18(木) 20:47 -

引用なし
パスワード
   Cells(myRow, 5)に入力されている数字(1月から12月まで)によってセルの位置を変えて
背景色をつけたいので、以下のようなマクロを組みました。
もうすこしすっきり書くことはできないでしょうか。

Dim myRow As Integer
With Cells(myRow, 5)
 Select Case .Value
  Case "1"
   Cells(myRow, 9).Interior.ColorIndex = 38
  Case "2"
   Cells(myRow, 10).Interior.ColorIndex = 38
  Case "3"
   Cells(myRow, 11).Interior.ColorIndex = 38
  Case "4"
   Cells(myRow, 12).Interior.ColorIndex = 38
  Case "5"
   Cells(myRow, 13).Interior.ColorIndex = 38
  Case "6"
   Cells(myRow, 14).Interior.ColorIndex = 38
  Case "7"
   Cells(myRow, 15).Interior.ColorIndex = 38
  Case "8"
   Cells(myRow, 16).Interior.ColorIndex = 38
  Case "9"
   Cells(myRow, 17).Interior.ColorIndex = 38
  Case "10"
   Cells(myRow, 18).Interior.ColorIndex = 38
  Case "11"
   Cells(myRow, 19).Interior.ColorIndex = 38
  Case "12"
   Cells(myRow, 20).Interior.ColorIndex = 38
 End Select

どうぞよろしくお願いします。

【19900】Re:Select Caseの文をすっきりさせたいの...
回答  Hirofumi  - 04/11/18(木) 21:16 -

引用なし
パスワード
   こんなでは?

  Dim myRow As Integer
  Dim lngCol As Long
  
  lngCol = Val(StrConv(Cells(myRow, 5).Value, vbNarrow)) + 8
  Cells(myRow, lngCol).Interior.ColorIndex = 38

【19901】Re:Select Caseの文をすっきりさせたいの...
回答  Hirofumi  - 04/11/18(木) 21:30 -

引用なし
パスワード
   >  Dim myRow As Integer
>  Dim lngCol As Long
>  
>  lngCol = Val(StrConv(Cells(myRow, 5).Value, vbNarrow)) + 8
>  Cells(myRow, lngCol).Interior.ColorIndex = 38

此れでマズイ様なら

  Dim myRow As Integer
  Dim lngCol As Long
 
  lngCol = Val(StrConv(Cells(myRow, 5).Value, vbNarrow))
  If 1 <= lngCol And lngCol <= 12 Then
    lngCol = lngCol + 8
    Cells(myRow, lngCol).Interior.ColorIndex = 38
  End If

【19902】Re:Select Caseの文をすっきりさせたいの...
質問  みもざ  - 04/11/18(木) 21:34 -

引用なし
パスワード
   Hirofumi さん、さっそくありがとうございます。
とってもいい感じなのですが、
Cells(myRow, 5)が空欄のときにも対処するには、
ifと組み合わせるということになりますか?

>こんなでは?
>
>  Dim myRow As Integer
>  Dim lngCol As Long
>  
>  lngCol = Val(StrConv(Cells(myRow, 5).Value, vbNarrow)) + 8
>  Cells(myRow, lngCol).Interior.ColorIndex = 38

【19903】Re:Select Caseの文をすっきりさせたいの...
お礼  みもざ  - 04/11/18(木) 21:42 -

引用なし
パスワード
   Hirofumi さん、ありがとうございます。
行き違いになってしまってごめんなさい。

>此れでマズイ様なら
>
>  Dim myRow As Integer
>  Dim lngCol As Long
> 
>  lngCol = Val(StrConv(Cells(myRow, 5).Value, vbNarrow))
>  If 1 <= lngCol And lngCol <= 12 Then
>    lngCol = lngCol + 8
>    Cells(myRow, lngCol).Interior.ColorIndex = 38
>  End If

ばっちりでした。
助かりました。これで、すっきりしました。
本当にありがとうございました。

【19948】Re:Select Caseの文をすっきりさせたいの...
回答  Kein  - 04/11/19(金) 20:48 -

引用なし
パスワード
   >空欄のときにも対処

Dim myRow As Integer
Dim lngCol As Long
With Cells(myRow, 5)
  If IsEmpty(.Value) Then
   空白のときの処理
  Else
   lngCol = Val(StrConv(.Value, vbNarrow)) + 8
   Cells(myRow, lngCol).Interior.ColorIndex = 38
  End If
End With

てな感じでしょうね。

10777 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free