
講義の宿題で7×7の魔方陣をVBAで解いてこいといわれました。
しかしながら自分のスキルではどうにもなりませんでした。
自分はIFやDim等までしか習っていません。
課題の注意点としては
1から49までの数値を検出
「1」は1行目の中央(4列目)に書き出す
基本的に、数値の書き出す順番は斜め上に移動
また、書き込む数値を「7」で割った場合の余りが「1」の時
書き込みの場所は下方向に移動する。
枠をはみ出した場合
上にはみ出した(行)の場合 7行目に
右にはみ出した(列)の場合 1列目に
それぞれ移動
以上のような条件でエクセルのVBEを用いて解きたいのですが、どうにも分かりません。自分でも様々なサイトで調べてみたところどれも難しすぎて理解できませんでした。
心優しき方は教えていただけると幸いです。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
整数の2次元配列を魔方陣に見立ててやってみました。
ただ、ご提示の条件では書ききれなかったのと勝手に判断した部分がありますので、ご参考程度にしていただければと思います。
こちらで勝手に判断した、勝手に解釈した点は以下の通りです。
・「斜め上に移動」は「右斜め上に移動」と解釈
・「下にはみ出した(行)の場合 1行目に」
基本的に右に進んでるだけですので、左にはみ出した場合は想定してません。
以下、サンプルです。出力方法は指定がなかったので最終的に配列の1,1から7,7まで取り出して頂ければと思います。
Dim MAHOUJIN(1 To 7, 1 To 7) As Integer
Dim i As Integer
Dim x As Integer
Dim y As Integer
x = 1
y = 4
MAHOUJIN(x, y) = 1
For i = 2 To 49
If i Mod 7 = 1 Then
y = y + 1
Else
x = x + 1
y = y - 1
End If
If x > 7 Then
x = 1
End If
If y > 7 Then
y = 1
End If
If y < 1 Then
y = 7
End If
MAHOUJIN(x, y) = i
Next
No.5
- 回答日時:
に載っている5の場合を参考に
奇方陣の作り方
右上に進む、が基本で
下記4つのIF文がルールのようだ。
ーー
コード 標準モジュールに
Sub test01()
n = 7
x = 1: y = Int((n + 1) / 2)
For i = 1 To n * n
Cells(x, y) = i
MsgBox i
x = x - 1: y = y + 1
If x < 1 And y > n Then
x = x + 2: y = y - 1
End If
If x < 1 Then x = x + n
If y > n Then y = y - n
If Cells(x, y) <> "" Then
x = x + 2: y = y - 1
End If
Next i
End Sub
ーーーーー
3039481101928
384779182729
466817263537
5141625343645
1315243342444
2123324143312
2231404921120
5,7で確認済み。
ーー
この質問のコーナーの規約では、宿題の問題は質問に出してならないはず。
No.4
- 回答日時:
『宿題』は自分で取り組まないと意味がないのではないですか?
今回のケースはきっと結果の表があって、
結果から法則を見つけて、その解法のためにどんなコーディングをすれば良いか、
というスキルを身に付けようとするものではないでしょうか。
役割を考えて変数を使う事、
Mod関数について知る事、
数値を入れるアドレスをどうやって導き出すか考える事、などがポイントになりそう。
...なので、いきなりコードを書くのではなくて、
紙の上でいろいろ悩んでみる事が必要じゃないですか?
一例ですが、
Sub try()
Const n As Long = 7
Dim v(1 To n, 1 To n) As Long
Dim w As Long
Dim x As Long
Dim y As Long
Dim i As Long
Dim j As Long
w = 0
For i = 1 To n
For j = 1 To n
x = (j + i * (n - 1) + n \ 2) Mod n + 1
y = (j + i * (n - 2)) Mod n + 1
w = w + 1
v(y, x) = w
Next
Next
Range("A1").Resize(n, n).Value = v
End Sub
あえて
>基本的に、数値の書き出す順番は斜め上に移動
これを無視しました。
何かのヒントになれば幸いです。
#まぁ、数値の増減方向が違うのは考えるのが面倒くさい、というのがホンネだったんですが、
#書いてみて、あと6文字程度追加すればいいだけなのに気付いたり...
No.3
- 回答日時:
>講義の宿題で7×7の魔方陣をVBAで解いてこいといわれました。
>しかしながら自分のスキルではどうにもなりませんでした。
>自分はIFやDim等までしか習っていません。
少なくとも教えられた範囲で解答できる宿題を出されていると思います。
或いは受けていない講義があるのでは?
その場合には受けた人に教わるのも手ですけれど。
No.2
- 回答日時:
Sub Sample()
Dim i As Integer
Dim x As Integer
Dim y As Integer
Dim x1 As Integer
Dim y1 As Integer
x = 4
y = 1
Cells(y, x) = 1
For i = 2 To 49
If i Mod 7 = 1 Then
y = y + 1
If y = 8 Then
y = 1
End If
Cells(y, x) = i
Else
x1 = x + 1
y1 = y - 1
If x1 = 8 Then
x1 = 1
End If
If y1 = 0 Then
y1 = 7
End If
If Cells(y1, x1) = "" Then
Cells(y1, x1) = i
y = y1
x = x1
Else
x1 = x - 1
If x1 = 0 Then
x1 = 7
End If
Cells(y1, x1) = i
x = x1
y = y1
End If
End If
Next i
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
- Java Java 南京錠 2 2023/02/04 11:46
- Excel(エクセル) セルを数式で指定する方法 5 2022/04/13 16:55
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- その他(プログラミング・Web制作) atcoder python コードへの助言 2 2022/08/12 15:31
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- 数学 数学A、確率の問題です。 nを4以上の自然数とする。数字の1からnが書かれたカードが1枚ずつ、合計n 3 2023/07/02 22:54
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++ (byte)(col & 0xFF) の意味
-
VBA public変数はどのようなこ...
-
エクセルVBAでテキストボッ...
-
レコードセットにnullの場合
-
visual basic初心者です。 visu...
-
プロシージャまたは関数の引数...
-
VB6でForm_Load中にイベントを...
-
テキストボックスかラベル上の...
-
チェックボックスを操作できな...
-
String型の値にスラッシュをつ...
-
TEXTBOXの表示形式の変...
-
Functionの戻り値を配列にした...
-
プロシージャを呼び出したプロ...
-
【VBScript】変数のスコープ
-
テキストボックス1の値に対する...
-
C#のループでtextboxに値を入れ...
-
ボールが壁に当たって跳ね返る...
-
EXCEL2010 VBA SelectionChange...
-
VBでの入力値制限について
-
他のフォームから別のフォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二点の座標から距離や角度を求...
-
C#を勉強していて、指定したフ...
-
テキストファイルの読み込みと...
-
複数条件のオートフィルタ(VBA)
-
VC++ (byte)(col & 0xFF) の意味
-
VB.NET)コンボボックスの連動に...
-
ドラゴン曲線を再帰で書く
-
検索結果の指定列をリストボッ...
-
カラーの16進表記の足し算
-
エクセルのVBAでの7×7の魔方陣...
-
エクセル ユーザーフォーム ...
-
エクセル・VBAでテキストボック...
-
VBA for next
-
ExcelのVBAについて質問です。
-
C言語について教えてください。
-
for文の質問です。
-
2次元配列を返す関数について
-
texで図と表を並べたい
-
エクセルVBAでテキストボッ...
-
VBA public変数はどのようなこ...
おすすめ情報