Excel VBA質問箱 IV

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

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


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

【25112】別シートに代入するには にしもり 05/5/20(金) 13:59 質問[未読]
【25126】Re:別シートに代入するには ウッシ 05/5/20(金) 16:16 回答[未読]
【25158】Re:別シートに代入するには にしもり 05/5/23(月) 9:51 質問[未読]
【25179】Re:別シートに代入するには にしもり 05/5/23(月) 20:13 質問[未読]
【25183】Re:別シートに代入するには ponpon 05/5/23(月) 23:37 回答[未読]
【25193】Re:別シートに代入するには にしもり 05/5/24(火) 9:10 質問[未読]
【25232】Re:別シートに代入するには ponpon 05/5/24(火) 23:01 発言[未読]
【25234】Re:別シートに代入するには ウッシ 05/5/24(火) 23:54 回答[未読]
【25236】Re:別シートに代入するには ponpon 05/5/25(水) 0:20 発言[未読]
【25243】Re:別シートに代入するには にしもり 05/5/25(水) 9:23 お礼[未読]

【25112】別シートに代入するには
質問  にしもり  - 05/5/20(金) 13:59 -

引用なし
パスワード
   こんにちは。
あるシートにA1に11、A2に12、A3に13、A4に14、B1に太郎、B2に花子、B3に次郎、B4に愛子というふうに入っています。
いま、別シートをアクティヴにしてF3から下にむかって、太郎、花子・・と入れていき、それを90行までくり返すロジックを組みたいのです。
下記のようにループさせてみましたが、???の部分で行き詰まっています。
どのような式を入れればよいか、どなたかご教示いただけませんでしょうか。

  m = 3
  Do While m <= 90
    i = 11
    Do While i <= 14
      Range("F" & m & "").Select =???
      i = i + 1
    Loop
    m = m + 1
  Loop
  

【25126】Re:別シートに代入するには
回答  ウッシ  - 05/5/20(金) 16:16 -

引用なし
パスワード
   こんにちは

処理が良く分からないです。

Sub test()
  With Range("F3:F6")
    .Value = Worksheets("Sheet1").Range("B1:B4").Value
    .AutoFill Destination:=Range("F3:F90"), Type:=xlFillDefault
  End With
End Sub

だけで良さそうですけど、元のコードを修正するなら、

Sub test1()
  m = 3
  Do While m <= 90
    i = 1
    Do While i <= 4
      Range("F" & m).Value = _
        Worksheets("Sheet1").Cells(i, 2).Value
      i = i + 1
      m = m + 1
    Loop
  Loop
End Sub

「あるシート」名は「Sheet1」として有ります。

【25158】Re:別シートに代入するには
質問  にしもり  - 05/5/23(月) 9:51 -

引用なし
パスワード
   ▼ウッシ さん:
こんにちは。
>Sub test1()
>  m = 3
>  Do While m <= 90
>    i = 1
>    Do While i <= 4
>      Range("F" & m).Value = _
>        Worksheets("Sheet1").Cells(i, 2).Value
>      i = i + 1
>      m = m + 1
>    Loop
>  Loop
>End Sub
のほうを使わせていただきたいと思っています。
申し訳ないのですがその後やりたいことが少し変わりました。
質問時点では次行のセルに入れるために変数mを使いましたが、
今は、次列のセルに入れるために変数mを使いたいと存じます。

Range(F & m).Value = Worksheets("Sheet1").Cells(i, 2).Value

Range("m" & 3).Value = Worksheets("Sheet1").Cells(i, 2).Value

のように変えたのですが、エラーになってしまいます。
土、日で自力でやろうと思ったのですが結局できませんでした。
次列のセルに入れるために変数mを使うにはどうすればよいでしょうか。

【25179】Re:別シートに代入するには
質問  にしもり  - 05/5/23(月) 20:13 -

引用なし
パスワード
   こんにちは。
ニーズがまた少し変わりました。

アクティヴシートのF3から、1つ飛ばしながら、SHEET1のD2からD33にはいっている値を順次入れます。
T3まできたら次行に移り、今度はF4から、1列飛ばしながら、SHEET1のD2からD33のうちまだ入れていない値を順次入れます。
N4まできたら次行に移り、今度はF5から、1列飛ばしながら、SHEET1のD2からD33のうちまだ入れていない値を順次入れます。
N5まできたら次行に移り、今度はF6から、1列飛ばしながら、SHEET1のD2からD33のうちまだ入れていない値を順次入れます。

N6まできたら次行に移り、今度はF7から、1列飛ばしながら、SHEET1のD2からD33のうちまだ入れていない値を順次入れます。
このときSHEET1がD33に達していたらD2に戻ることとします。
N7まできたら次行に移り、今度はF8から、1列飛ばしながら、SHEET1のD2からD33のうちまだ入れていない値を順次入れます。
このときSHEET1がD33に達していたらD2に戻ることとします。
N8まできたら次行に移り、今度はF9から、1列飛ばしながら、SHEET1のD2からD33のうちまだ入れていない値を順次入れます。
このときSHEET1がD33に達していたらD2に戻ることとします。
N9まできたら次行に移り、今度はF10から、1列飛ばしながら、SHEET1のD2からD33のうちまだ入れていない値を順次入れます。
このときSHEET1がD33に達していたらD2に戻ることとします。

このように、N90が埋まるまで繰り返したいのです。
自力でここまできましたがループしてしまい、終わりません。
どこが悪いか、どなたかご教示くださいませんでしょうか。

  Sub Macro1()
  Dim i As Long
  Dim k As Long
  Dim m As Long
  Dim p As Long
  Dim n As Long

  Range("F3").Select
  m = 6
  i = 2
 
  Do While i <= 9
     Cells(ActiveCell.Row, m).Select
     ActiveCell = Worksheets("sheet1").Cells(i, 4).Value
     i = i + 1
     m = m + 2
  Loop
  
  Do While n <= 87
    k = -14
    Do While k <= -6
      n = 1
      ActiveCell.Offset(n, k) = Worksheets("sheet1").Cells(i, 4).Value
      i = i + 1
      if i = 30 Then i = 2
      k = k + 2
    Loop
  Loop

  End Sub

【25183】Re:別シートに代入するには
回答  ponpon  - 05/5/23(月) 23:37 -

引用なし
パスワード
   こんばんは。

こんなんでは、いかが?
アクティブシートではなく、sheet2に抽出します。


Sub test2()
  Dim myVal
  Dim i As Integer
  Dim n As Long
  Dim m As Long
 
  With Worksheets("sheet1")
    myVal = .Range("D2:D33").Value
  End With
  With Worksheets("sheet2")
   For i = 1 To 8
    .Cells(3, (2 * i - 1) + 5).Value = myVal(i, 1)
   Next
    n = 5
    m = 1
    i = 1
   Do While n < 440
    .Cells(n \ 5 + 3, (2 * m - 1) + 5) = myVal(i + 8, 1)
     i = i + 1
     n = n + 1
     m = m + 1
    If m > 5 Then m = 1
    If i > 24 Then i = -7
   Loop
   
  End With


End Sub

【25193】Re:別シートに代入するには
質問  にしもり  - 05/5/24(火) 9:10 -

引用なし
パスワード
   ▼ponpon さん:
ありがとうございますっ!
素人のわたくしには驚嘆するしかありません。
いろいろと考えをめぐらせて下さったのだと思います。
で、まことに恐縮なのですがもうひとつ教えてください。

スプレッドシートの3行目にはT列まで入りいますが、
スプレッドシートの7,15,19,23,27,31,35,39,43,47,51,55,59,63,67,71,75,79,83,87行目も、同様にT列まで入れる必要があるのです。このロジック
をご教示いただけないでしょうか。

【25232】Re:別シートに代入するには
発言  ponpon  - 05/5/24(火) 23:01 -

引用なし
パスワード
   こんばんは。
いろいろと試してみたのですが、
規則性をいまいち確立できません。
初心者の私には、ロジックを思いつきません。
常連さんの回答をお待ちください。
それから、質問が次から次へと変更されているようですが、
仕様をはっきりと確立されてから質問をされたらいかがでしょうか?

【25234】Re:別シートに代入するには
回答  ウッシ  - 05/5/24(火) 23:54 -

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

なんか更に意味が分からなくなってますね。

Sub test2()
  Dim v As Variant
  Dim lc As Long
  Dim r As Long
  Dim m As Long
  Dim i As Long
  Const lr As Long = 90
    
  v = Worksheets("Sheet1").Range("D2:D33").Value
  With ActiveSheet
    If .Name = "Sheet1" Then
      MsgBox "Sheet1以外をアクティブにして実行する事。", 64
      Exit Sub
    End If
    Application.ScreenUpdating = False
    r = 3
    i = 1
    Do While r <= lr
      m = 6
      Select Case True
        Case r = 3 Or r = 7
          lc = 20
        Case (r > 14) And (r Mod 4 = 3)
          lc = 20
        Case Else
          lc = 14
      End Select
      Do While m <= lc
        .Cells(r, m).Value = v(i, 1)
        i = i + 1
        If i > 32 Then i = 1
        m = m + 2
      Loop
      r = r + 1
    Loop
    Application.ScreenUpdating = True
  End With
End Sub

合ってるかどうか分かりませんけど。

【25236】Re:別シートに代入するには
発言  ponpon  - 05/5/25(水) 0:20 -

引用なし
パスワード
   こんばんは。
ウッシさん、フォローありがとうございます。
ちゃんと抽出されました。
そーか!
行によって、列の数を変えればいいというところまではわかり、
15行以降は規則性があることはわかってはいたのですが、
Select Caseを使えばいいのか。

で、何をしているのでしょうね?

【25243】Re:別シートに代入するには
お礼  にしもり  - 05/5/25(水) 9:23 -

引用なし
パスワード
   ▼ponpon さん、ウッシさん:

こんにちは。
ponponさんが初心者なはずはないと思いますが・・。
仕様を決めてからたずねるべきとのご指摘、ごもっともです。
また「規則性」という言葉に、自分に欠けていたのもが見えた気がしました。
さて、ウッシさんにいただいたロジックで希望のものが出来ました。
まことにありがとうございました。
規則性ということを念頭に、努力をしたいと思います。
で、何をしているかというとシフト表を作ってみたかったのです。
1グループは8名、2〜4グループは5名で22日分を作ってみたかったのです。
いままで手でやっていたので気が滅入っていました。
本当にありがとうございました。

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