Excel VBA 質問スレ Part36 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/01/09(金) 16:59:02.80ID:GzFHQ3J4★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
前スレ:Excel VBA 質問スレ Part35
http://peace.2ch.net/test/read.cgi/tech/1414186311/
関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0449デフォルトの名無しさん
2015/02/16(月) 18:49:26.10ID:H/rtMJFz> 数セルに分ける
しかないですかね・・・
問題は文章中に改行もあるので、固定値で区切って次のセルに流すと、文の途中で
改行されてしまうので、ある程度の文字数で改行のある区切りを検査して切り分けて
それをセルに順次分けて流し込む ような感じでしょうか・・・
あとは#になる仕様(バグ?)対策に、書式設定を文字列ではなく標準にしないとでしょうか
ただ、流し込む枠(印刷レポートの書式)が既に運用されていて変更できないので、
文字数にあわせて文字サイズとさらに分けているセルの高さも考慮してはめ込まなければならない上に
文字サイズを調整した文章に、さらに枠全体に配置するために垂直の均等割り当てをしていたのですが、
複数のセルにまたがるとなるとそれもできないですね・・・ 困りました・・・orz
0450デフォルトの名無しさん
2015/02/16(月) 19:51:35.23ID:GvyW2zIK0451デフォルトの名無しさん
2015/02/16(月) 20:58:57.53ID:xdM8JK5oでっかいラベルをシートに置いて、そこに表示させれば?
ページが分かれる可能性があるなら幾つも作っておくとか
セルほどの柔軟性はなくなるけど、まぁなんとかなるんじゃないか
コードはこんな感じ
ActiveSheet.DrawingObjects("ラベル 1").Text = "テキスト内容"
0452デフォルトの名無しさん
2015/02/16(月) 21:38:57.85ID:dgZM3/Bj0453デフォルトの名無しさん
2015/02/16(月) 21:39:47.72ID:x+zyA1Lt0454デフォルトの名無しさん
2015/02/17(火) 00:12:30.43ID:146t/jKa複数セルを結合して使っちゃダメなの?
0455デフォルトの名無しさん
2015/02/17(火) 01:35:26.10ID:lrt7cu1fおおもとのプロシージャAからプロシージャBを抜き出しそれをAから呼び出すことにしました。
しかしここで問題が。
BにはAで使ってた変数がたくさんあります。
でもAとは分裂してしまったのでAへのたくさんの変数の参照ができなくなりました。
こういうのって、どうやって解決するのが定番なのですか?
まさかAの変数をすべてグローバルにするの?
グローバル変数というのも使わないほうがいいと言うので困っています。
0456デフォルトの名無しさん
2015/02/17(火) 04:05:11.02ID:X2MoRgQWggrks
VBA 変数 スコープ
0457デフォルトの名無しさん
2015/02/17(火) 05:33:38.22ID:or7h50KGグローバルはpublic、モジュール内全体はprivate、プロシージャ内はautoと三種の参照範囲があるから、それで頑張るくらいかな
VBAで小規模なら細かく分ける必要も無いと思うけど
0458デフォルトの名無しさん
2015/02/17(火) 07:19:27.06ID:9NYC6Wy0出力エリアがきまってるなら、それに収まる程度に入力を制限するのが普通だろ
>>455
役割ごとにちゃんと分割できてれば、Bの役割に必要な情報をBへの引数で渡すのが一般的
もしBが大量の(A内の)変数を見ないとダメなら、そもそもの機能分割がちゃんとできてない
0459デフォルトの名無しさん
2015/02/17(火) 08:52:30.90ID:4e4VuLTt結合すれば1024を超えて表示が可能でしょうか?
今のところ2セルを結合しています
>>458
エリアが決まっているので文字数で文字サイズに応じて調整+均等割り付けで
体裁を整えるというように組んでいますが、
業務上、何文字以内という制限を設けるわけにはいかないので・・・
もともとワードでやっていたのですが、文字数のばらつきが多く、
あまりPCに詳しくない利用者が文字サイズや行間の調整ができないので
自動で全てまかなう為にフォームで入れさせて印刷するために設計してます
0460デフォルトの名無しさん
2015/02/17(火) 09:51:43.90ID:CCisoKxZ0461デフォルトの名無しさん
2015/02/17(火) 11:31:05.37ID:X2MoRgQW0462デフォルトの名無しさん
2015/02/17(火) 11:56:41.84ID:LFQwlpntイメージと実態が異なってるかもしれないので聞きたいんだけど、
・元のプロシージャは大体何行くらいか?
・たくさんの変数って大体何個くらいか、配列は使っているか?
0463459
2015/02/17(火) 12:11:55.22ID:GkDdPpGyそんな殺生なorz
古いPC引っ張り出してExcel2007で試してみたんですが、
確かに書式設定を「文字列」にすれば2000字くらい入れたセルは
########と表示されるんですが、「標準」にしてあげれば
表示されるんですが、どういうことでしょう
文字サイズを小さくして1セル内に入りきる調整はいりますが、
入ってしまえば1024も軽く超えて表示できてますし、プレビューでも表示できてる
0464デフォルトの名無しさん
2015/02/17(火) 12:14:07.07ID:GkDdPpGy0465デフォルトの名無しさん
2015/02/17(火) 15:49:10.19ID:875KssuY1行の文字数上限決めて、上限超えた文字は下の行に強制改行していけばいいんじゃねーの?(鼻ほじ
あとは WordVBA で範囲内の書式をクリアするってのがあるから
逆に範囲内の書式を設定することできるんじゃね?
Word持ってない・使ったことないから詳しくは知らんけど
0466デフォルトの名無しさん
2015/02/17(火) 17:08:53.70ID:ScAGgWPEexcelのuserformで作成してみたのですが、よくわからなくて。
オプションボタンをクリックするとコンボボックスの選択していたrowsourceが出てくるのですが。
そこで出てきたコンボボックスの値を確定ボタン(コマンドボタン)をクリックしたときにB2に打ち込まれるようにしたくて打ち込まれたら次のB3、b4という感じに繰り返して、閉じるボタンを押すまで打ち込める状態にしたいのですが。
どういう関数なら打ち込めるのかわかりません。長文&説明下手なのでよくわからないかもですが、教えてください
0467デフォルトの名無しさん
2015/02/17(火) 18:05:57.87ID:jRndRgSB0468デフォルトの名無しさん
2015/02/17(火) 20:50:40.68ID:MwEIMFRH> プロシージャ内はauto
いつの間にそんなもんが
0469デフォルトの名無しさん
2015/02/17(火) 23:48:47.02ID:6KvLI8HS古い知識(auto変数)で書いたんだけど、プロシージャ内のdimは正式には何て言うの?
0470デフォルトの名無しさん
2015/02/17(火) 23:50:19.47ID:wuWlXvwRセルへのアクセスを減らすとスピードが速くなるという書き込みを過去コメントで見ましたが
Dim で変数を定義していくとして実用範囲で最大何個ぐらいまで定義できるのでしょうか?
今構想中の計画では2500必要であることがわかったのですが2500個定義することは可能なのでしょうか?
詳しい方いらっしゃいましたら宜しくお願い致します。
0471デフォルトの名無しさん
2015/02/17(火) 23:55:06.61ID:6KvLI8HSその変数のサイズ×配列数が2GB内
0472デフォルトの名無しさん
2015/02/18(水) 00:00:43.15ID:0d8GWwAd2000MBの2GBですか?でしたら膨大ですね。
定義するのは桁数の少ない自然数なので2500個は全く問題無さそうですね。
ありがとうございます。
0473デフォルトの名無しさん
2015/02/18(水) 00:29:38.42ID:FooM0Je6古いも新しいもVBAやVBにauto変数なんてないわ
VBAでの変数のスコープは一般的にはプロシジャ(プライベート)、モジュール、パブリックだ
正確にはヘルプの「適用範囲と参照可能範囲の概要」みると
>プロシージャ レベル、プライベート モジュール レベル、およびパブリック モジュール レベルがあります
って書いてあるがな
0474デフォルトの名無しさん
2015/02/18(水) 00:30:26.31ID:LcW7LB/Iいくつかの数値を纏めて格納する 方法として、リスト()形式と、コレクション形式というのがあると聞きました。
格納が終わったあとで、入っている数値を、昇順に並べ替えて取り出したい場合は、どうすれば上手くやれるでしょう?
たとえば、1を格納、5を格納、3を格納、とやった後に、「135」と並べ替えて出力したい場合などです。
よろしくお願いします。
0475デフォルトの名無しさん
2015/02/18(水) 00:43:05.77ID:FooM0Je6リスト()形式って何か知らんが
VBAにそのような機能はありません
自作するか、エクセルシートで代用するか、外部ライブラリ使うかして下さい
0476デフォルトの名無しさん
2015/02/18(水) 01:24:18.41ID:hnIb3krlFor i = 1 To 100
Dim j As Integer
Next i
のようにForブロック内で宣言した変数jは
Forブロックの外でも使えますか?
0477デフォルトの名無しさん
2015/02/18(水) 01:47:08.51ID:FooM0Je6宣言より後なら使える
0478デフォルトの名無しさん
2015/02/18(水) 04:20:36.63ID:qJod6Zoi配列にソートという関数は無いの?
Rubyで言うと、Arrayクラス.sort
0479デフォルトの名無しさん
2015/02/18(水) 08:22:38.53ID:yLcFaQ17ない
VBAって参照を返せないのがなんとも不便だよなあ。ByRefで受け取った大きな配列をByRefで出力する方法はないものか。
これがあればパイプ処理できるのに。
0480デフォルトの名無しさん
2015/02/18(水) 08:44:07.09ID:Lm/UpLLWローカル変数でいいでしょ
特定の言語 (C/C++) の用語使うより全然マシ
0481デフォルトの名無しさん
2015/02/18(水) 08:57:16.29ID:mZTAkLE5自作するしかないね
0482デフォルトの名無しさん
2015/02/18(水) 09:00:07.27ID:Lm/UpLLW> ByRefで受け取った大きな配列をByRefで出力する方法はないものか。
同じ配列なら返さなくてもいいように思うが...
Variant 型は実質参照みたいなもんだから、これじゃダメ?
Sub T()
Debug.Print F()(55)
End Sub
Function F() As Variant
Dim A(100) As Intger
A(55) = "松井"
F = A
End Function
0483デフォルトの名無しさん
2015/02/18(水) 10:19:46.66ID:yLcFaQ17配列に対する操作を繋げたいんですよ。
func2(func2(func1(matrix)))
とやるとmatrixの3ヵ所が変更されるみたいに。
そのたびに新しく配列を作って返すんじゃ効率が悪いから、副作用ありで繋げる処理を書きたい。
0484デフォルトの名無しさん
2015/02/18(水) 11:41:15.32ID:yLcFaQ17func2(func2(func1(matrix)))じゃなくて
func3(func2(func1(matrix)))
0485デフォルトの名無しさん
2015/02/18(水) 11:41:27.73ID:Yek5NpLy他の言語は知らんけど
VBAでは配列変数はByRefでしか受け渡し出来ないんじゃなかったっけ?
0486デフォルトの名無しさん
2015/02/18(水) 11:48:28.31ID:QJoLg/2Bfunc1(matrix)
func2(matrix)
func3(matrix)
って書きたくないのかがわからん。
こっちのがどういう順番で何やってるか一目瞭然なのに。
0487デフォルトの名無しさん
2015/02/18(水) 11:51:14.19ID:yLcFaQ17x = x * 2 という式で各要素を2倍するなんてことができない。
そこをあきらめて y = x * 2 として別な配列に入れようと思っても、実際にやろうとすると y(i, j) って
書かなきゃならないが i と j を動かすスマートな方法がない。
0488デフォルトの名無しさん
2015/02/18(水) 11:57:49.28ID:yLcFaQ17受け取るときはByRefにすればいいんだけど、関数からreturnするときはコピーが作られちゃうんですよ。
出した例でいうと、func1した結果は引数matrixに反映されるけど、後続処理はコピーに対する処理となるので反映されないです。
0489デフォルトの名無しさん
2015/02/18(水) 12:12:57.43ID:a8UdE6sd俺はそうしてる
とても捗ってる
0490デフォルトの名無しさん
2015/02/18(水) 12:15:29.32ID:yrCv40dm0491デフォルトの名無しさん
2015/02/18(水) 12:16:44.52ID:a8UdE6sd0492デフォルトの名無しさん
2015/02/18(水) 12:18:55.27ID:yLcFaQ17たいていの処理を使い捨ての一行プログラムでこなせたりする?
0493デフォルトの名無しさん
2015/02/18(水) 12:26:58.19ID:BIe8ociqあれは自己参照かけるかな?
それはわからんが、できそうなのは配列の全要素を格納が期待できるバッファを用意して足らない部分を動的に確保する。
もうひとつはモジュール単位のproperty let get、と一時オブジェクトは避けられないかもしれんが、
setでargs + objectオブジェクトに参照をもたせるくらいか?
いずれにせよfortranのような参照がモダンな言語で無いのはほとんどの場合において資産。
0494デフォルトの名無しさん
2015/02/18(水) 12:27:29.75ID:zPrNzJwIそれで終わりだろ?
0495デフォルトの名無しさん
2015/02/18(水) 12:28:28.19ID:a8UdE6sdrubyだと
app.Selection.each{|cell| cell.Value = "hoge" if cell.Value =~ /hu*ga*/}
で選択範囲の"huuuuugaaaaa"を"hoge"にしたりとか色々
OLEで提供されてるオブジェクトはメソッド、プロパティ含めてほぼ制限なく使える
あと [1,3,6,2].sort とかも当然できるぞ!!
0496デフォルトの名無しさん
2015/02/18(水) 12:35:51.08ID:yLcFaQ17それをどこから(どういう環境から)実行するの?
対話的に実行できる?
0497デフォルトの名無しさん
2015/02/18(水) 12:36:13.41ID:YbJdAwW+0498デフォルトの名無しさん
2015/02/18(水) 12:48:44.92ID:a8UdE6sdirbっていう対話環境が標準で用意されてるからそこから操作できる
もちろんスクリプトファイルを作って実行もできる
具体的にコード書いちゃうと
require 'win32ole' #OLE操作のためのライブラリ読み込み
app = WIN32OLE.connect('Excel.Application') #今開いているExcelのApplicationオブジェクトを取得
あとは煮るなり焼くなり>>495だったり
この辺参考になるはず
http://magazine.rubyist.net/?0027-ExcellentRuby
http://www.boddie.org.uk/python/COM.html
0499デフォルトの名無しさん
2015/02/18(水) 12:51:26.25ID:a8UdE6sdExcelで完結しないから他人に配布するとかの用途には不向きだね
書き捨てのちょっとしたマクロには最適
0500デフォルトの名無しさん
2015/02/18(水) 13:39:13.16ID:QJoLg/2B0501デフォルトの名無しさん
2015/02/18(水) 13:41:20.01ID:QJoLg/2B今、C#でCOM経由でExcelを操作するアプリ作ってるけど、COMとの通信回数が増えると目に見えて遅くなる。
0502デフォルトの名無しさん
2015/02/18(水) 14:45:17.24ID:Lm/UpLLWVBA にはソートとかがないでしょ? って話だったかと。
まあ、俺はわざわざ Ruby とやらの環境を入れる気にはならんけどな。
0503デフォルトの名無しさん
2015/02/18(水) 14:51:33.82ID:QJoLg/2B> VBA にはソートとかがないでしょ? って話だったかと。
あ、そういう話だったか。
だったら、こういうのを使えるようになった方がいいと思う。
『.NET Frameworkを使う』
http://officetanaka.net/excel/vba/tips/tips98.htm
ArrayListを使った、Sort, Clone, Reverseの例が載ってる。
0504デフォルトの名無しさん
2015/02/18(水) 14:52:10.22ID:yLcFaQ17Rubyとか興味なくはないけど、一からやるとなると面倒だね。
VBAもツールが揃ってくると書き捨ての処理は一行プログラムで書けるようになってきて、そうなると参照返しが欲しくなる。
行を分けろと言うのは正論だけどさ。
0505デフォルトの名無しさん
2015/02/18(水) 15:25:22.43ID:a8UdE6sd例えば>>503のSample1なんてのは
datalist = Array.new(5){(rand*10000).to_i}
print [datalist.sort, "----", datalist.reverse].join("\n")
とたった2行で同じ出力が得られて捗る
0506デフォルトの名無しさん
2015/02/18(水) 15:48:01.19ID:QJoLg/2B> とたった2行で同じ出力が得られて捗る
いや、COMが扱えるRubyを使える環境にあって、Rubyのことも良く知ってるなら捗るだろうけど、
Ruby知らない人にはハードル高すぎ。
https://www.ruby-lang.org/ja/downloads/ の
ActiveScriptRuby
RubyInstaller
RailsInstaller
のどれでもCOMが使えるのかどうかとか、
そもそもCOMって何って人とか、
コマンドライン何それって人もいるかもだし。
0507デフォルトの名無しさん
2015/02/18(水) 15:59:54.78ID:SUifHOIO既に他の言語知ってたり、479みたいにVBAに不便さを覚えた人にはおすすめ程度
そういえばExcel関係ないVBAの話はこのスレではNGだけど、
Excel関係あるVBA以外の話はこのスレでいいの?
流石にrubyの話はスレ違いだと思うんだけど、Excelの操作、
マクロだと考えるとこのスレのような気もするし
0508デフォルトの名無しさん
2015/02/18(水) 17:43:29.73ID:TBGWIM9o入力するときに別のセルに入れてくれれば…と思うことしきりです…
0509デフォルトの名無しさん
2015/02/18(水) 17:44:02.68ID:PO1vEDuy0510デフォルトの名無しさん
2015/02/18(水) 17:50:58.57ID:QMIzQpCsかなり開発効率あがるんだが
MSさんおなしゃす
0511デフォルトの名無しさん
2015/02/18(水) 18:42:17.76ID:Z5m5h1Ujまぁ会社PCにrubyインスコできないから自分も使う機会ねーんだけどさ
TANAKAのこれhttp://officetanaka.net/excel/vba/tips/tips40.htm
組みなおして call で呼び出せば1行じゃないかやったね
0512デフォルトの名無しさん
2015/02/18(水) 18:42:36.36ID:99hPsA+1わかる
あとunicode対応してほしい
海外からマクロ動かないクレームが頻繁に来る
0513デフォルトの名無しさん
2015/02/18(水) 18:48:16.97ID:2rhvVJ3Z糞だろC#にしとけ
0514デフォルトの名無しさん
2015/02/18(水) 18:51:38.23ID:xzrnQB2I日本語使わなきゃいいじゃん
0515デフォルトの名無しさん
2015/02/18(水) 19:29:22.65ID:yLcFaQ17自分もdllいくつか使ってるけど結局は俺様ローカルな世界になっちまう。
0516デフォルトの名無しさん
2015/02/18(水) 20:24:24.68ID:+TVqHmXQ見た感じvisual studioでvb.net/c#での開発が出来るみたいだし、アドインだって作れそうだけど、活用してる人いない?
0517デフォルトの名無しさん
2015/02/18(水) 20:39:48.65ID:FooM0Je6Range.Characters で1文字ずつFont.Colorを調べれば出来ると思うけど
簡単にやる方法は無いんじゃないかな
0518デフォルトの名無しさん
2015/02/18(水) 21:47:43.19ID:ZsVgoINqVBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/
0519デフォルトの名無しさん
2015/02/19(木) 01:32:15.47ID:vu9Qsx5a悪い悪い、C言語やってたから(笑)
0520デフォルトの名無しさん
2015/02/19(木) 03:02:07.75ID:lDFiAK4+returnを使わないで、引数で、IN/OUTすれば?
f(ByRef in, ByRef out)
>>511
Macには最初から、Ruby, Pythonなども入っている
0521デフォルトの名無しさん
2015/02/19(木) 08:22:32.12ID:4dFHTBvUMSはVBAは廃止する方向性で取り組んでますよ。
オンライン版でスクリプトが無いのはその現れ。
プログラム組みたいなら、VS2013使ってろって話。
0522デフォルトの名無しさん
2015/02/19(木) 08:30:27.00ID:QTl9VVmV2007では機能していたモードレスの設定が、
2013では機能しなくなりました。
UserForm.show 0
コードはこれだけです。
別ファイルをアクティブにすると
フォームが裏に隠れてしまいます。
ウィンドウを上手く配置し、
ボタンが見えるようにしてクリックすると
別ファイルのアクティブシートを取得できます。
2007から2013で何か仕様変更があったのでしょうか?
0523デフォルトの名無しさん
2015/02/19(木) 08:46:33.76ID:4dFHTBvUhttp://www.asahi-net.or.jp/~ef2o-inue/kankyo/sub02_05_02.html
0524デフォルトの名無しさん
2015/02/19(木) 10:32:27.29ID:55lVElNxありがとうございます。
仕様変更があったのですね。
よく分かりました。
何か良い回避策はありませんでしょうか?
0525デフォルトの名無しさん
2015/02/19(木) 11:14:55.86ID:8gErZFsQ> 糞だろC#にしとけ
C#だと、いまだにReleaseComObject()地獄なんだよね。
そんなの無しにGCで解放してくれって思うんだが。
0526デフォルトの名無しさん
2015/02/19(木) 12:27:31.66ID:IuurH7h+たしかうまい回避策はなくて、他のアクティブシートでの処理が終わったら
ユーザーフォームと紐付いているブックを毎回アクティブに切り替える必要があったと思う。
0527デフォルトの名無しさん
2015/02/19(木) 16:24:48.21ID:NAyB84ut当方素人で、コードが違うからどうなのかわからんのだけど、
同じようにモードレスのフォームを開いた後、別シートを開いてから
元のフォームを操作するとインデックス範囲のエラーが発生するので
ThisWorkbook.Worksheets(〜〜と全部明示してみたら一応動作したように思えるけど
対応として大丈夫あってるのだろうか・・・
0528デフォルトの名無しさん
2015/02/19(木) 21:16:29.95ID:o2jUxII1MDI表示にするオプションとかないの?
フォームをシステムモーダルにする方法とかでもいいけど
それはそれで別の問題も出るだろうし
複数ブックいじるVBAとか結構影響でそうだな
0529デフォルトの名無しさん
2015/02/20(金) 00:08:26.48ID:Xi0Ydcd+亀レスだが、いま実装中。
なんとかVariantを参照で返せるようになった。あとちょっとだ。
m = 1
x = 参照(m)
?x
1
m = 2
?x
2
となる
0530デフォルトの名無しさん
2015/02/20(金) 07:44:51.60ID:LhrcWQ82レス下さった皆さん、ありがとうございます。
やりたいことは、アクティブシートに対して
モードレスなフォームのボタンをクリックすると
そのシートが処理されるというものです。
2013用にブック名、シート名のコンボボックスを
表示させようかと考えています。
次バージョンではどうなるのでしょうね。
0531デフォルトの名無しさん
2015/02/24(火) 12:32:13.53ID:nq42fo+uExcel2010
┏━━━━┓ ┏━━━━┓
┃A愛媛県┃ ┃B香川県┃
┗━━━━┛ ┗━━━━┛
┏━━━━┓ ┏━━━━┓
┃C高知県┃ ┃D徳島県┃
┗━━━━┛ ┗━━━━┛ ←コマンドボタン4個
ワークシート
A B C D
1 松山市 高松市 高知市 徳島市
2 今治市 丸亀市 室戸市 鳴門市
3 宇和島市 坂出市 安芸市 小松島市
4 八幡浜市 善通寺市 南国市 阿南市
5 新居浜市 観音寺市 土佐市 吉野川市
6 西条市 さぬき市 須崎市 阿波市
7 大洲市 東かがわ市 宿毛市 美馬市
8 伊予市 三豊市 土佐清水市 三好市
VBAを使って上の図のようなものを作りたいと思っています。
A列が愛媛県の市町村でB列が香川県の市町村というぐあいです。
そしてA1〜D8の市町村をランダムにE1に表示させます。
表示された市町村がどれであるか考えて上の4個のボタンのどれかを押します。
正解か不正解かはF1に表示させます。
この市町村当てクイズのようなものを作りたいのですが詳しい方いらっしゃいますか。
まずはE1にランダム表示させるところから学んでいきたいと思っています。
0532デフォルトの名無しさん
2015/02/24(火) 14:57:55.19ID:jA7JvUel【誤】
┏━━━━┓ ┏━━━━┓
┃A愛媛県┃ ┃B香川県┃
┗━━━━┛ ┗━━━━┛
┏━━━━┓ ┏━━━━┓
┃C高知県┃ ┃D徳島県┃
┗━━━━┛ ┗━━━━┛ ←コマンドボタン4個
【正】
┏━━━━┓ ┏━━━━┓
┃B愛媛県┃ ┃A香川県┃
┗━━━━┛ ┗━━━━┛
┏━━━━┓ ┏━━━━┓
┃C高知県┃ ┃D徳島県┃
┗━━━━┛ ┗━━━━┛ ←コマンドボタン4個
0533デフォルトの名無しさん
2015/02/24(火) 15:36:15.77ID:cA1xu2y/詳しくはないけど
>まずはE1にランダム表示させるところから学んでいきたいと思っています。
RND関数 てのがあるよ
0534デフォルトの名無しさん
2015/02/24(火) 15:52:09.13ID:8JogkC7z>そしてA1〜D8の市町村をランダムにE1に表示させます。
どのようなタイミングで表示するの?
例えば、一定間隔で表示し時間切れは不正解にするとか
0535デフォルトの名無しさん
2015/02/24(火) 16:41:06.64ID:FzvWfJKU初心者っぽいし作りやすい仕様を想定してあげよう
0536531
2015/02/24(火) 19:17:54.40ID:nq42fo+u次の問題ボタンを置こうと思います。
>一定間隔で表示し時間切れは不正解にする
そんなこともできるんですか。今回は時間制限はつけないでいいかと思っています。
0537デフォルトの名無しさん
2015/02/24(火) 20:49:49.67ID:PIm2u7Y8Sub Sample1()
Dim Button_Name As String
Button_Name = Application.Caller
MsgBox Button_Name
End Sub
Function makeRndInt(minInt As Integer, maxInt As Integer) As Integer
Randomize
makeRndInt = Int((maxInt - minInt + 1) * Rnd + minInt)
End Function
次の問題ボタンはA1〜D8のセルをランダムに抽出し、E1に表示する機能
回答ボタンは、どのボタンが押されたかを見て、対応する列名を取得し、A1〜D8範囲を探す機能を追加すればいいかと
0538デフォルトの名無しさん
2015/02/24(火) 21:05:22.03ID:8JogkC7zヒントです
Sub セル選択()
Cells(Int((8 * Rnd) + 1), Int((4 * Rnd) + 1)).Select
End Sub
0539531
2015/02/24(火) 22:27:48.47ID:nq42fo+uプログラムの文章をすぐに理解するのは難しいようです。
頂いたヒントをもとに勉強してきます。
0540デフォルトの名無しさん
2015/02/25(水) 14:00:38.12ID:aPhmfYhG0541デフォルトの名無しさん
2015/02/25(水) 14:25:46.10ID:lUiDnnd2元々VBA無くてもできそうじゃん
0542デフォルトの名無しさん
2015/02/25(水) 16:20:44.02ID:rpMKp3K50543デフォルトの名無しさん
2015/02/25(水) 16:38:07.73ID:oiOKwPPk恐喝ですか?
0544デフォルトの名無しさん
2015/02/25(水) 19:23:19.97ID:oz2nX22y0545デフォルトの名無しさん
2015/02/25(水) 21:19:48.54ID:eqSO3lN+0546デフォルトの名無しさん
2015/02/25(水) 21:21:30.78ID:hgjjK+Cd0547531
2015/02/26(木) 02:04:11.48ID:uI5cgKXNもっとやりやすい方法があるでしょうか。
0548デフォルトの名無しさん
2015/02/26(木) 04:05:32.06ID:ldMRR6U8勉強用には良いと思うよ
■ このスレッドは過去ログ倉庫に格納されています