Excel VBA質問箱 IV

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

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


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

【65888】For〜 Nextの使い方 けい 10/7/5(月) 17:41 質問[未読]
【65889】Re:For〜 Nextの使い方 アラン・ケイ 10/7/5(月) 18:06 回答[未読]
【65890】Re:For〜 Nextの使い方 けい 10/7/5(月) 18:48 質問[未読]
【65891】Re:For〜 Nextの使い方 アラン・ケイ 10/7/5(月) 19:56 回答[未読]
【65892】Re:For〜 Nextの使い方 アラン・ケイ 10/7/5(月) 20:19 回答[未読]
【65894】Re:For〜 Nextの使い方 けい 10/7/6(火) 10:07 お礼[未読]

【65888】For〜 Nextの使い方
質問  けい  - 10/7/5(月) 17:41 -

引用なし
パスワード
   お知恵をいただきたいのですが

以下のように、A列に"Education"という文字がある3行下から使用されている範囲を"Ed範囲"とし、範囲の行数を"x"としました。
Ed範囲のB列の文字を分類名に分けてE列に入力していきます。
iは使用範囲の最初の行を表します。
B列には途中に空白の場合があるので、空白のセルで切れることがなく
範囲の最下段まで必ずチェックをかけたいので、使用範囲の"Ed範囲"のB列全て
又は、行数xの回数分だけのどちらかの方法でF列にグループ名を出すようにしていきたいのですが、繰り返す回数xをどう指定したらよいのか・・・
わかりません。範囲で指定した方が簡単ならばその方法でもかまいません。
何かアドバイスをおお願いいたします。

Sub Test()
  Dim myRange As Range  
  Dim i As Long
  Dim x As Integer

  srcName = "Education"
  Set myRange = Range("A:A").Find(What:=srcName, LookAt:=xlWhole)
  If Not myRange Is Nothing Then
  
    i = myRange.Row + 3

     Cells(i, "A").CurrentRegion.Name = "Ed範囲"
     Range("Ed範囲").Select
     x = Range("Ed範囲").Rows.Count

    If Left(Cells(i, "B").Value, 6) = "D.V.M." Then
      Cells(i, "E").Value = "medical D"
     
    ElseIf Left(Cells(i, "B").Value, 8) = "D.Med.Sc" Then
      Cells(i, "E").Value = "Doctor"

    ElseIf Left(Cells(i, "B").Value, 2) = "M." Then
      Cells(i, "E").Value = "Master"
     
    Else
      Cells(i, "E").Value = "その他"
     
    End If

End Sub

【65889】Re:For〜 Nextの使い方
回答  アラン・ケイ  - 10/7/5(月) 18:06 -

引用なし
パスワード
   こんなことでしょうか?

Sub Test()
  Dim srcName As String
  Dim myRange As Range
  Dim startRow As Long
  Dim lastRow As Long
  Dim k    As Long
  Dim s    As String
  
  srcName = "Education"
  Set myRange = Range("A:A").Find(What:=srcName, LookAt:=xlWhole)
  
  If Not myRange Is Nothing Then
    startRow = myRange.Row + 3
    lastRow = Cells(Rows.Count, 2).End(xlUp).Row
    
    For k = startRow To lastRow
      s = Cells(k, "B").Value
      If s <> "" Then
        If Left(s, 6) = "D.V.M." Then
          Cells(k, "E").Value = "medical D"
        ElseIf Left(s, 8) = "D.Med.Sc" Then
          Cells(k, "E").Value = "Doctor"
        ElseIf Left(s, 2) = "M." Then
          Cells(k, "E").Value = "Master"
        Else
          Cells(k, "E").Value = "その他"
        End If
      End If
    Next
  End If
End Sub

【65890】Re:For〜 Nextの使い方
質問  けい  - 10/7/5(月) 18:48 -

引用なし
パスワード
   ▼アラン・ケイ さん:

ご返信ありがとうございます。

lastRow = Cells(Rows.Count, 2).End(xlUp).Row

のところについて質問ですが、これはどの部分の行をカウントしていることになりますか?

データは下にもありますが、一つの領域に対してのみB列の中身を調べたいのですが、それに対応してると思って大丈夫でしょうか?


>こんなことでしょうか?
>
>Sub Test()
>  Dim srcName As String
>  Dim myRange As Range
>  Dim startRow As Long
>  Dim lastRow As Long
>  Dim k    As Long
>  Dim s    As String
>  
>  srcName = "Education"
>  Set myRange = Range("A:A").Find(What:=srcName, LookAt:=xlWhole)
>  
>  If Not myRange Is Nothing Then
>    startRow = myRange.Row + 3
>    lastRow = Cells(Rows.Count, 2).End(xlUp).Row
>    
>    For k = startRow To lastRow
>      s = Cells(k, "B").Value
>      If s <> "" Then
>        If Left(s, 6) = "D.V.M." Then
>          Cells(k, "E").Value = "medical D"
>        ElseIf Left(s, 8) = "D.Med.Sc" Then
>          Cells(k, "E").Value = "Doctor"
>        ElseIf Left(s, 2) = "M." Then
>          Cells(k, "E").Value = "Master"
>        Else
>          Cells(k, "E").Value = "その他"
>        End If
>      End If
>    Next
>  End If
>End Sub

【65891】Re:For〜 Nextの使い方
回答  アラン・ケイ  - 10/7/5(月) 19:56 -

引用なし
パスワード
   > B列には途中に空白の場合があるので、空白のセルで切れることがなく
> 範囲の最下段まで必ずチェックをかけたいので
ということでしたから、

lastRow = Cells(Rows.Count, 2).End(xlUp).Row
によって、B列の最後データがある行をとりだしています。
そして,startRowからlastRowまでの行をすべてチェックしています。

B列の最終行にカーソルを置いて、
Ctrlキーを押しながら↑キーを押すのと同じ動作をマクロで実現しています。

【65892】Re:For〜 Nextの使い方
回答  アラン・ケイ  - 10/7/5(月) 20:19 -

引用なし
パスワード
   使用範囲の"Ed範囲"と書かれていますけど、
Cells(i, "A").CurrentRegion.Name = "Ed範囲"
は別の意味ですよ。UsedRangeと混同していませんか?

Ed範囲が絶対正しいということなら、
それとColumns(2)のIntersectをとって、
そのRangeオブジェクトに対して
For each ・・・Nextすればいいでしょう。

【65894】Re:For〜 Nextの使い方
お礼  けい  - 10/7/6(火) 10:07 -

引用なし
パスワード
   ▼アラン・ケイ さん:

ご回答をありがとうございました。
よく読みながらやってみたら理解でき
うまく行きました。

ありがとうございます。


>使用範囲の"Ed範囲"と書かれていますけど、
>Cells(i, "A").CurrentRegion.Name = "Ed範囲"
>は別の意味ですよ。UsedRangeと混同していませんか?
>
>Ed範囲が絶対正しいということなら、
>それとColumns(2)のIntersectをとって、
>そのRangeオブジェクトに対して
>For each ・・・Nextすればいいでしょう。

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