Excel VBA質問箱 IV

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

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


13862 / 76734 ←次へ | 前へ→

【68374】Re:日付を記号で
発言  UO3  - 11/2/28(月) 14:43 -

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

こんにちは
とりあえずわかる範囲で。
(コードが正しいかどうかはわかりません)
★ご自身でも、ヘルプ等に目を通しておかれることをお勧めします。

For i = 1 To 3
  j = WorksheetFunction.Max(j, Cells(Rows.Count, i).End(xlUp).Row)
Next i

A列からC列まで i に列番号を与えて、その列に値のある最終行を
Cells(Rows.Count, i).End(xlUp).Row で取得し、その3列の
最終行の最大値を、最終的にはjに取得しています。
j は最初 0 ですから A列の最終行とMax関数で比較すると、後者が大きいので
j には A列の最終行が入ります。次に、それとB列の最終行の大きいほうを
j に取得しているわけです。

★すこし、まだるっこしいコードのような気もします。
★以下の説明のなかで、この j を 「最終行」と呼びます。

If j >= 2 Then
  ・・・・・・・
End If

最終行が 2 以上のときのみ処理をします。
おそらく1行目はタイトル行でしょうか?
ですから、シート上にタイトル行しかない場合は処理をしないということです。

Range("D2:D" & j).Resize(, 48).ClearContents

D列の2行目から、「最終行」までの値をクリアします。

For Each c In Range("A2:C" & j)
・・・・・・
Next

A2からC列の「最終行」までのセルを1つずつ c に取り出し、ループの中で
処理を行います。

If IsDate(c.Value) Then
 ・・・・・
End If

取り出したセルの値(c の値)が日付型の場合にのみ処理を行います。

Month(c.Value2)
Day(c.Value2)

Value2は日付型が持つDouble型のシリアル値です。この場合、通常のValueでもかまいません。
で、その日付から、月や日を抽出しています。

WorksheetFunction.Match(Day(c.Value2), Array(1, 8, 16, 23), 1)

ワークシート関数のMatchを使い、取り出した日付の日が、配列(1, 8, 16, 23)の
何番目にあるかを取得します。例えば 8日であれば、2 が返ります。

k = (Month(c.Value2) - 1) * 4 + _
    WorksheetFunction.Match(Day(c.Value2), Array(1, 8, 16, 23), 1)

k に 以下をいれます。これが何を意味しているのかはわかりません。

(月-1) * 4 + 配列(1, 8, 16, 23)の中での日の位置

c.EntireRow.Cells(3 + k).Value

取り出したセルが存在する行の 3 + k 列の値ということになります。
これが何かも、こちらではわかりません。

Choose(c.Column, "○", "◎", "★")

A列〜C列の範囲内で取り出したセルの列番号によって(つまり 1,2,3のいずれか)
"○", "◎", "★"から「Choose」します。列がB(列番号は2)なら2番目の"◎"を
取得します。

c.EntireRow.Cells(3 + k).Value = c.EntireRow.Cells(3 + k).Value _
          & Choose(c.Column, "○", "◎", "★")

.EntireRow.Cells(3 + k).Value この値を、元々あった値 とChooseで取得した値
とを連結した文字列に置き換えます。
4 hits

【68372】日付を記号で HIRO 11/2/28(月) 13:52 質問
【68373】Re:日付を記号で とおりすがり 11/2/28(月) 14:38 回答
【68374】Re:日付を記号で UO3 11/2/28(月) 14:43 発言
【68375】Re:日付を記号で UO3 11/2/28(月) 14:46 発言
【68383】Re:日付を記号で HIRO 11/3/1(火) 16:22 質問
【68384】Re:日付を記号で UO3 11/3/1(火) 21:04 回答
【68385】Re:日付を記号で とおりすがり 11/3/1(火) 21:33 回答
【68386】Re:日付を記号で UO3 11/3/1(火) 21:53 回答
【68387】Re:日付を記号で UO3 11/3/1(火) 22:04 発言

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