講義の宿題で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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで特定の文字が入った行をコ...
-
Excelのマクロについて教えてく...
-
VBAのエラー表示の対処法について
-
VBA 別ブックからコピペしたい...
-
Excelのマクロについて教えてく...
-
Excel 範囲指定スクショについ...
-
【ExcelVBA】インデックスが有...
-
VBAのループ処理について教えて...
-
エクセルでCDOを使ったメール送...
-
EXCEL vbaでシート上に配置した...
-
Excel_VBAについて質疑です。(...
-
【ExcelVBA】dictionaryの重複...
-
VBAでセルの書式を変えずに文字...
-
修正依頼:【VBA】 結合セルに...
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
Web画面の文字をVB6で取得したい
-
[VB.net] ボタン(Flat)のEnable...
-
エクセルのVBAコードについて教...
-
エクセルvbaの対象セルに色をつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二点の座標から距離や角度を求...
-
VB.NET)コンボボックスの連動に...
-
VBA for next
-
for文の質問です。
-
エクセル・VBAでテキストボック...
-
複数条件のオートフィルタ(VBA)
-
検索結果の指定列をリストボッ...
-
C#を勉強していて、指定したフ...
-
codbo2を買うか迷ってますbo2が...
-
VC++ (byte)(col & 0xFF) の意味
-
エクセルのVBAでの7×7の魔方陣...
-
VBA ユーザーフォーム
-
4変数の非線形方程式のときかた
-
線の太さ
-
matlabで価格時系列
-
ドラゴン曲線を再帰で書く
-
一行飛ばしで合計
-
このプログラムがうまく作動し...
-
Linuxのプログラミング
-
VBA public変数はどのようなこ...
おすすめ情報