Excel VBA質問箱 IV

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

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


2467 / 13646 ツリー ←次へ | 前へ→

【67861】空白でない列番号を取得する ケイ 11/1/13(木) 17:34 質問[未読]
【67862】Re:空白でない列番号を取得する UO3 11/1/13(木) 18:03 発言[未読]
【67864】Re:空白でない列番号を取得する ケイ 11/1/13(木) 19:27 質問[未読]
【67870】Re:空白でない列番号を取得する UO3 11/1/14(金) 10:02 回答[未読]
【67872】Re:空白でない列番号を取得する ケイ 11/1/14(金) 10:59 お礼[未読]
【67863】Re:空白でない列番号を取得する UO3 11/1/13(木) 18:17 回答[未読]

【67861】空白でない列番号を取得する
質問  ケイ E-MAIL  - 11/1/13(木) 17:34 -

引用なし
パスワード
   どうぞご教授をお願いいたします。

セルA1に「=NOW()」として本日の日付があります。

B1〜Z1には週ごとに1列づつ右へ進むように表になっていて
A1と同じ週に当てはまる列にも本日の日付を出すようになっています。
当てはまらないセルは空白です。

セルA1に当てはまる週が何列目かということを調べたいのですが
B1〜Z1の範囲の中で空白以外の文字は何列目
というようなマクロでできますでしょうか。

どのようにしたらその列を取得することができますか。
よろしくお願いします。

【67862】Re:空白でない列番号を取得する
発言  UO3  - 11/1/13(木) 18:03 -

引用なし
パスワード
   ▼ケイ さん:

こんにちは

B1〜Z1には、何か式がセットされているのですか?
それとも、該当の列には日付けがあり、それ以外は「正真正銘」の空白ですか?

【67863】Re:空白でない列番号を取得する
回答  UO3  - 11/1/13(木) 18:17 -

引用なし
パスワード
   ▼ケイ さん:

とりあえず1列にのみ値(計算式ではない)があり、その他の列は、本当の空白
という条件付で、以下をアップしておきます。

Option Explicit

Sub Sample()
  Dim c As Range
  On Error Resume Next
  Set c = Range("B1:Z1").SpecialCells(xlCellTypeConstants)
  On Error GoTo 0
  If Not c Is Nothing Then
    If c.Count > 1 Then
      MsgBox "2ヶ所以上に値が入っています"
    Else
      MsgBox "値がある列番号は " & c.Column & " です"
    End If
  Else
    MsgBox "値の入った列はありません"
  End If
  Set c = Nothing
End Sub

【67864】Re:空白でない列番号を取得する
質問  ケイ E-MAIL  - 11/1/13(木) 19:27 -

引用なし
パスワード
   ▼UO3 さん:

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

>B1〜Z1には、何か式がセットされているのですか?

数式が入っており、この行とわかるように当てはまる列に日付を出しています。
その列が何列目というところまで知りたいのです。


>▼ケイ さん:
>
>こんにちは
>
>B1〜Z1には、何か式がセットされているのですか?
>それとも、該当の列には日付けがあり、それ以外は「正真正銘」の空白ですか?

【67870】Re:空白でない列番号を取得する
回答  UO3  - 11/1/14(金) 10:02 -

引用なし
パスワード
   ▼ケイ さん:

おはようございます

そうですか。式が入っているんですね。であれば

1. その式で、該当の週を判断しておられるわけですから、その式でやっている
  ロジックをVBAに取り込むのが1つの方法。
  おそらくは、B1〜Z1の各列の「意味」というか「定義」があるんですよね。
  きっと、現在の式では、その定義をベースに判断しているんだと思われます。
  たとえば、今日2011年1月14日の場合、B〜Z列(26週)のどこが該当の週?
  (逆に言えば、この時、B列は、いつの週の列?)
  この仕様がわかればそれをコード化すれば列を取得できます。

2. その仕様がわからない状態でコードを書くとすれば、「力技のループ?」で
  B1〜Z1をチェックし、値が空白ではないもの(あるいは値が日付けのもの)を
  ピックアップして、そのセルの列を取得することになります。

Option Explicit

Sub 力技ループ()
  Dim c As Range
  Dim col As Long
  
  For Each c In Range("B1:Z1")
    If IsDate(c.Value) Then
      col = c.Column
      Exit For
    End If
  Next
  If col = 0 Then
    MsgBox "日付けの入ったセルはありません"
  Else
    MsgBox "当該列番号は " & col & " です"
  End If
  
End Sub

【67872】Re:空白でない列番号を取得する
お礼  ケイ E-MAIL  - 11/1/14(金) 10:59 -

引用なし
パスワード
   ▼UO3 さん:

ありがとうございました。
やりたかったことができています。

こんなにシンプルに書くだけでできてしまうんですね。

まだまだVBAの初級のため、勉強していきたいと思います。

どうもありがとうございました。


>▼ケイ さん:
>
>おはようございます
>
>そうですか。式が入っているんですね。であれば
>
>1. その式で、該当の週を判断しておられるわけですから、その式でやっている
>  ロジックをVBAに取り込むのが1つの方法。
>  おそらくは、B1〜Z1の各列の「意味」というか「定義」があるんですよね。
>  きっと、現在の式では、その定義をベースに判断しているんだと思われます。
>  たとえば、今日2011年1月14日の場合、B〜Z列(26週)のどこが該当の週?
>  (逆に言えば、この時、B列は、いつの週の列?)
>  この仕様がわかればそれをコード化すれば列を取得できます。
>
>2. その仕様がわからない状態でコードを書くとすれば、「力技のループ?」で
>  B1〜Z1をチェックし、値が空白ではないもの(あるいは値が日付けのもの)を
>  ピックアップして、そのセルの列を取得することになります。
>
>Option Explicit
>
>Sub 力技ループ()
>  Dim c As Range
>  Dim col As Long
>  
>  For Each c In Range("B1:Z1")
>    If IsDate(c.Value) Then
>      col = c.Column
>      Exit For
>    End If
>  Next
>  If col = 0 Then
>    MsgBox "日付けの入ったセルはありません"
>  Else
>    MsgBox "当該列番号は " & col & " です"
>  End If
>  
>End Sub

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