• ベストアンサー

VBAで

VBAで Sub test() '日付から曜日を取得 WEEKDAY(A2) Dim i As Integer For i = 3 To 20 Cells(i, 2) = Weekday(Cells(i, 1)) Next End Sub 横のセルを参照する場合は、上記のようになると思いますが、上のセルを参照するにはどのようにすればいいでしょうか? 例えばA1~T1セルを参照して、A2~T2に反映させると言った具合です。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

For i = 1 To 15 Cells(2,i) = Weekday(Cells(1,i)) Next です。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

VBAの基礎の基礎 Cells(X,Y)のX,Yの意味を勉強しましたか。 第1行に日付(シリアル値)が入っているとして Sub test() '日付から曜日を取得 WEEKDAY(A2) Dim i As Integer For i = 3 To 20 Cells(2,i) = Weekday(Cells(1,i)) '1行i列の値の曜日コードを第2行にセット Next End Sub ーー 曜日を出すなら Sub test() '日付から曜日を取得 WEEKDAY(A2) Dim i As Integer For i = 3 To 20 Cells(2, i) = Format(Weekday(Cells(1, i)), "aaa") '1行i列の値の曜日コードを第2行にセット Next End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

For i = 1 To 15 じゃなくて For i = 1 To 20 でした。 For i = Asc("A") - 64 To Asc("T") - 64 こちらでもいいでしょう。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAで関数を使うには?

    こんな感じだったとします。   A1      B1 2002/9/2 2002/9/3 2002/9/4 2002/9/5   : このB1にそれぞれの曜日を表示させるVBAを以下のようにしました。 Sub youbi() Dim i As Integer For i = 3 To 10 Cells(i, 3).Value = Weekday(Cells(i, 2), "aaa") Next End Sub もちろんエラーでした。 (メッセージは「型が一致しません」です。) そこで以下のように変更しました。 Sub youbi() Dim i As Integer For i = 3 To 10 Cells(i, 3).Value = "=text(Weekday(b3), ""aaa"")" Next End Sub するときちんと曜日が表示されたのですが、もちろん全部B3のセルの日付の曜日です。 ここを変数にするにはどうしたらいいのでしょうか? とっても簡単なことのように思えますが、意外とハマってしまって抜け出せません。 よろしくお願いします。

  • VBA教えてください

    VBA初心者です やりたい事 B70セルから文字を探し B70~B20セルに文字が入っている場合 文字が入っている一つ下のセルを選択しA1セルの文字を反映する 例、B50セルに文字が入っていたらB51セルにA1セルの文字を入れる ということをしたいです 考えたコード Sub test() Dim a As Variant Dim i As Long For i = 70 To 20 Step -1 If Len(Cells(i, "B").Value) > 0 Then Cells(i, "B").Offset(1, 0).Value = range("A1") End If next i End Sub このコードだと B40セル文字有り B41セルにA1セルの文字反映 B50セル文字有り B51セルにA1セルの文字反映という風に 複数反映してしまいます 私が実現したいのは B40セルに文字があろうが B50セルに文字が有ればB51セルだけにA1セルの文字を反映させる という形にしたいのです。(下から処理したい) 分かる人いればコードを書いてほしいです。 宜しくお願いします。 説明不足で有れば捕捉しますm(ーー)m

  • Exel VBAで1つずつ代入するには?

    VBA初心者です。 日報を入力する作業を、Exel VBAを使って省力化したいと考えています。 1日が1シート、1か月分で1ブックになっています。 いったん別シートにべた打ちしたデータを、VBAで1つずつ各日のシートに貼り付けたいのです。 1枚目のシートのB列のセルB2~B32(1日~31日分に相当)に数値が入っているとして、 これを格納し、 シート「1日」セルF2、シート「2日」セルF2...シート「31日」セルF2 という具合に各シートの同じセル番地のセルに1つずつ貼り付けていくイメージです。 こんなふうに書いてみました。 ---------------------------------------- Sub test() Dim myNum(30) As Integer Dim i As Integer Dim j As Integer For i = 1 To 30 myNum(i) = Worksheets(1).Cells(i + 1, 2) For j = 1 To 30 Worksheets(i + 1).Cells(2, 6) = myNum(i) Next j Next i End Sub ---------------------------------------- でも、これでは1か月の日数の違いに対応できません。 これ以上はお手上げなので、お知恵を貸してください。 よろしくお願いします。

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub

  • エクセルVBA:ある有名な方のサイトで・・・

    VBA初心者です。よろしくお願いします。 いま、VBAを勉強しています。 有名なT氏のエクセルVBAに関するサイト(オフィスT・・)の、「高速化テクニック」のところで、下記、★ ★ ★以下のような例がありました。 「Cells(j, 1).Font.FontStyle = "太字"」 が目的の作業であるならば、 「Dim i As Integer」「For i = 1 To 100」を何のために宣言し、記述しているのでしょうか?「j」の変数の宣言は「Cells(j, 1).・・・」で理解できますが、「i」の宣言また、「For i = 1 To 100」は不要のように思われるのです。 最初は何かの間違いかと思っていましたが、同氏の他の解説にも同様の記述がありましたので、きっと、意味があるのですね。教えてください。 ★ ★ ★ Sub Test2() Dim i As Integer, j As Integer For i = 1 To 100 For j = 1 To 10 Cells(j, 1).Font.FontStyle = "太字" Next j Next i End Sub

  • VBA

    ExcelのVBAについて質問です。 1000以下の任意の整数nを画面入力から読み込んで、1+2+3+4+・・・+nの合計値をセルA1に表示させたいのですが、1とnの和が足されてしまいます。 どこがおかしいのでしょうか? 指摘お願いします。 以下テキストです。 スペースなどは気にせずテキストの部分でご指摘お願いします Sub ()   Dim i As Integer Dim n As Integer n = Application.InputBox(Prompt:="1000以下の整数を入力してください", Type:=1) If n <= 1000 Then For i = 1 To n iResult = i + 1 Cells(1, 1) = iResult Next i End Sub よろしくおねがいします。

  • VBAのプログラムでうまく動かなくて困っています。

    VBA初心者です。 エクセルのVBAのプログラムでうまく動かなくて困っています。教えていただける方がいらしたら、ぜひ教えて下さい!よろしくお願いします。エクセルの内容は以下のとおりです。 (内容) セル    E H J L N P R・・・ 8行目100 200 50 40 30 80 9行目130 350 10 50 60 120 110 ・ ・ (1)列Hの値が列Eの値より大きい場合その下に行を追加します。 (2)セルJ+セルL+セルN+・・をしてセルEの値を超えたセル以降の値を追加した行のセルJ列から順にコピペする処理です。 上のセルの1行目の内容でいいますと、 (1)列Hの値「200」が列Eの値「100」より大きいのでその下に行追加 (2)セルJ、L、N「50」+「40」+「30」でセルEの値「100」より大きいので、追加した行のセルJ列にセルN、Pの値をコピペするです。 以下が私が書いたプログラムです。 Sub test() Dim x As Integer Dim s As Integer Dim t As Integer x = Range("B8").End(xlDown).Row r = Range("J8").End(xlToRight).Column '8行目から最終行までループ For i = x To 9 Step -1 If Cells(i, 5) < Cells(i, 8) Then ☆【For r = y To 11 Step -2 Cells(s, t).Value = Cells(i, r) + Cells(i, r + 2) If Cells(i, 5).Value < Cells(s, t).Value            Then Exit For Next】 Rows(i + 1).Insert Shift:=xlDown '超えたセルをコピーして、1行下の"J列以降"に代入 ★ x = x + 1 End If Next i End Sub 上記プログラムで★の部分がうまく書けません。☆の部分も間違っているような気がします。よろしくお願いします。

  • エクセルVBAで複数セルをコピーの制御構文

    エクセルVBAで A8~I8のセルをコピーしてJ7~R7にコピーし、2行下に移り空白セルまで繰り返すという 処理をしたいと考えています Sub copy() Dim i As Integer i = 7 Do Until Cells(i, 1) = "" Cells(Cells(i,10),Cells(i,18).Value = Cells(Cells(i+1,1),Cells(i+1,9).Value i = i + 2 Loop End Sub と作ってみたところエラーで動きませんでした。 上記のプログラムはどこら辺がおかしいでしょうか? よろしくお願いします。

  • VBAでVLOOKUP関数のように動作させたい

    VBA初心者の者です。 勉強として、VBAでVLOOKUPのよう作動させてみようと思い、以下のようにコードを書きました。 Sub 試験() Dim i As Integer, mx As Integer mx = 2 For i = 2 To 10 If Worksheets("Sheet2").Cells(mx, 1) = Worksheets("Sheet1").Cells(i, 1) Then Worksheets("Sheet2").Cells(mx, 2).Value = Worksheets("Sheet1").Cells(i, 2).Value mx = mx + 1 Else Worksheets("Sheet2").Cells(mx, 2).Value = 0 mx = mx + 1 End If Next i End Sub ※sheet1が参照範囲、sheet2が検索値です。 これを実行させたところ問題にきづきました。 sheet1の参照範囲がループによって1ずつ増加していく点です。 (ループ一周目の参照範囲 A2~A10) (ループ二週目の参照範囲 A3~A10) 上記のように参照範囲を1ずつ増加させず、常に sheet1 のA2からA10 まで 参照させたいのですが、どのようにすればよいのでしょうか? ワークシート関数は使わない方向で考えています。 アドバイスお願い致します。

  • VBAで行を挿入する

    VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub

専門家に質問してみよう