ここから本文です

EXCELの関数でお伺いしたいです。

れりっくさん

2020/6/2809:01:27

EXCELの関数でお伺いしたいです。

若干VBA含む

for i = 1 to 11 then
cells( ??? , 1 ) = "あああ"
next i

11回ループする処理で、
???の計算式の結果が(78,105,130,157,182,209,234,261,286,313,338)
27と25の交互に増加していく感じにしたいです。

<<現状はこんな感じで無理やり動かしています>>
j = 78
for i = 1 to 11 then
cells( j , 1 ) = "あああ"
j = j + 25 + (i Mod 2) * 2
next i

もうちょっとスマートな感じで関数書くことはできないでしょうか?

閲覧数:
62
回答数:
4

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

taihenda****さん

2020/6/2819:54:00

べたで配列に入れるのはれりっくさんにあとでセルを100個とかに増やされて意地悪されると困るのでやめておいたほうが・・・


もう十分コードが短くなっているのでそれ以上はあまり変わらないかと思います。

それでは回答にならないので一応、



Sub test()
Dim i As Long
For i = 78 To 338 Step 25
If i Mod 2 = 1 Then i = i + 2
Cells(i, 1) = "あああ"
Next
End Sub

質問した人からのコメント

2020/6/28 23:08:29

回数ではなく、セルの位置で判定すればいいのか・・・
マクロを他人が見ても分かりやすいのと、
他にも応用が利くのでベストアンサーとさせていただきました。
他の回答者の人もありがとうございます。

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

bbw********さん

2020/6/2818:15:10

For Each r In Array(78,105,130,157,182,209,234,261,286,313,338)
Cells(r, 1)="あああ"
Next

30246kikuさん

2020/6/2811:39:22

> もうちょっとスマートな感じで

これが何を意味しているかわからないのですが・・・
どうなるとスマート???


> j = j + 25 + (i Mod 2) * 2



If ((i Mod 2) = 0) Then
   j = j + 25
Else
   j = j + 27
End If

とすると、後から見てもわかり易いかと・・・
いやいや、もうちょっと違う書き方・・・・なら
VBA での And Or はビット操作なので、以下の様にも記述出来るかと

Public Sub Samp1()
   Dim i As Long, j As Long

   j = 78
   For i = 1 To 11
      Cells(j, 2).Value = "いいい"
      j = j + 25 + (i * 2 And 2)
   Next
End Sub

i を 2倍して 2 と And した結果を、そのまま加算

2種類の値 25、27 をギッコンバッタンするだけなら、
良く使う方法として

Public Sub Samp2()
   Dim vC As Variant
   Dim i As Long, j As Long, k As Long

   vC = Array(27, 25)
   k = LBound(vC)
   j = 78
   For i = 1 To 11
      Cells(j, 3).Value = "ううう"
      j = j + vC(k)
      k = 1 - k
   Next
End Sub


>       k = 1 - k
この部分は
if 文で 0 なら 1、1 なら 0 と同じことを if 文使わないで・・・
ただ、Array で出来上がる vC の配列添え字が 0 ~ 固定
Option Base 1 宣言下では動かないものに・・・
その宣言があっても動くようにしておいたものが以下2パターン

Public Sub Samp3()
   Dim vC As Variant
   Dim i As Long, j As Long, k As Long, n As Long

   vC = Array(27, 25)
   k = LBound(vC)
   n = k * 2 + 1
   j = 78
   For i = 1 To 11
      Cells(j, 4).Value = "えええ"
      j = j + vC(k)
      k = n - k
   Next
End Sub

Public Sub Samp4()
   Dim vC(0 To 1) As Variant
   Dim i As Long, j As Long, k As Long

   vC(0) = 27
   vC(1) = 25
   k = 0
   j = 78
   For i = 1 To 11
      Cells(j, 5).Value = "おおお"
      j = j + vC(k)
      k = 1 - k
   Next
End Sub


規則性がある・ないに関わらずベタ展開しても

Public Sub Samp5()
   Dim vC As Variant, v As Variant

   vC = Array(78, 105, 130, 157, 182, 209, 234, 261, 286, 313, 338)
   For Each v In vC
      Cells(v, 6).Value = "かかか"
   Next
End Sub

排球好きさん

2020/6/2809:45:41

スマートではないですが、基本のみを使うとこんな感じでしょうか?

Dim i As Integer
Dim a As Integer
a = 78
Cells(a, 1) = "あああ"
i = 2
Do Until i > 11
If i <= 11 Then
a = a + 27
Cells(a, 1) = "あああ"
End If
If i + 1 <= 11 Then
a = a + 25
Cells(a, 1) = "あああ"
End If
i = i + 2
Loop

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる