X



Excel VBA 質問スレ Part67
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 33da-3+hg)
垢版 |
2020/06/26(金) 02:01:29.56ID:uDfmpksE0
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part66
https://mevius.5ch.net/test/read.cgi/tech/1589085825/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0746デフォルトの名無しさん (テテンテンテン MMee-DfbS)
垢版 |
2020/08/02(日) 04:27:47.15ID:yz3gxwYFM
ラウンドワンとかゲームセンターに置いてある
「動体視力ゲーム」みたいなのじゃないの?
数字ボタンがランダムな位置に出現して
押したら次のボタンが別の位置に現れるヤツ
0747デフォルトの名無しさん (ワッチョイ 4e06-LqCg)
垢版 |
2020/08/02(日) 12:51:46.72ID:i29UoGb/0
>>673
エクセルのほうが簡単だと思います。
A列:1〜20000までの連番
B列:口数
C列:∔B1/B列合計 (以下コピー)
D列:1行目は0、2行目 +C1、3行目以降は=+D2+C2をコピー
E列:+A1(以下コピー)
F列:=RAND()(以下コピー)
G列:=VLOOKUP(+F1,D$1:E$20000,2)を300行目までコピー
300/20000なら大口がいないと重複しなさそう。
重複があったらシートコピーして当選行を削除。
0749デフォルトの名無しさん (ワッチョイ 4e06-LqCg)
垢版 |
2020/08/02(日) 14:04:53.69ID:i29UoGb/0
ベースモデル考えて確率的に速い手段を選ぶだけ。
コード書くのが好きなら計算結果を配列に入れて、既定カウントに達するまで回せばいいけど、時間の無駄。
0754デフォルトの名無しさん (ワッチョイ 5d01-UD9X)
垢版 |
2020/08/02(日) 22:26:59.52ID:RZU5Rxbr0
>>747
A列:連番
B列:口数
C列:当選確率 = 口数/口数の合計
D列:点数 = 当選確率*RAND()
これでソートかけたほうが簡単じゃね
300番付近のボーダーラインで点数の重複が生じたら
重複者のみを対象に再度抽選
まだ重複者がいたらさらに再度抽選(・・・)

再抽選回数が0〜300と未定だけども現実的には多くても数回で終わるだろうよ
0755デフォルトの名無しさん (ワッチョイ 4e06-LqCg)
垢版 |
2020/08/02(日) 22:40:10.04ID:i29UoGb/0
>>754
そちらの方がいいですね。
0758デフォルトの名無しさん (ワッチョイ 79ce-Xvfy)
垢版 |
2020/08/03(月) 06:39:58.48ID:R5x2YJ6L0
数学的に「当選者を除外しながら次を抽選」で公平になる

A列に応募者を一列に並べて、2口応募なら2回並べて、存在するデータの行数*RAND()+1で抽選すれば、自動的に口数に比例して当選確率が上がる
当選者はどこかに覚えておいて、A列から除外してから次を抽選

300人の抽選なんて1秒もかからないし、プログラムもきわめて単純、作業列も必要ない
0760デフォルトの名無しさん (テテンテンテン MMee-DfbS)
垢版 |
2020/08/03(月) 11:17:37.07ID:uwp3oPMnM
5ちゃんに書き込んでる時点でお察し
0761デフォルトの名無しさん (ワッチョイ 017c-1vA1)
垢版 |
2020/08/03(月) 11:20:43.87ID:n1hXaiTs0
もう無理して数式でなんとかしようとするよりVBAでさっさと作った方がややこしくないし手っ取り早いんじゃないの
それなら処理時間なんか気にする必要も無し
0764デフォルトの名無しさん (ラクッペペ MMee-LxoB)
垢版 |
2020/08/03(月) 12:34:55.84ID:Dbk7eCCQM
発表は発送をもってかえさせろってのは
みんなインチキだよ

運ちゃんがボスジャン着ていたのは役得
0772デフォルトの名無しさん (ワッチョイ d68e-nhZs)
垢版 |
2020/08/03(月) 18:41:49.78ID:cM5/PGxb0
座って接待を受けるだけの誰にでも出来る仕事
0773デフォルトの名無しさん (ワッチョイ d6b3-UD9X)
垢版 |
2020/08/03(月) 20:25:24.18ID:YOfHflqE0
Sheet2で使うユーザーフォームにSheet1から参照したデータをコンボボックスに表示させ
CMBBox1の入力内容に合わせCMBBox2を連動させたいのですが

CMBbox1はこんな感じでデータを拾っています。
CMBBox1.RowSource = "Sheet1! H3:H" & Worksheets("Sheet1").Range("H" & Rows.Count).End(xlUp).Row

CMBBox2にCMBBox1が入力されると、参照列(H列)の4つ右のセルを表示させるにはどうしたらよいでしょうか
(CNBBox1にSheet1のH3が入力されると、CMBBox2のリストにSheet1のL3が表示される)



似たようなコードを拾ってきたのですがこれを弄って使えるようにしたいです。
Private Sub CMBBox1_Change()
Set ws = Worksheets("Sheet1")
Col = CMBBox1.ListIndex + 12
品名CMB2Box.Clear
For i = 1 To ws.Cells(Rows.Count, Col).End(xlUp).Row
CMBBox2.AddItem ws.Cells(i, Col).Value
Next
End Sub

よろしくお願いします
0774デフォルトの名無しさん (ワッチョイ 01e6-LxoB)
垢版 |
2020/08/03(月) 21:06:03.90ID:ukM+b7An0
リストに1件だけ表示っておかしくね?
そのデザインは却下だ
0776デフォルトの名無しさん (ワッチョイ 5d01-UdrD)
垢版 |
2020/08/03(月) 21:37:39.33ID:nPxqefQu0
A列最終行の次の行から、下方向150行に本日の日付を表示させたいのですが、
どう記述して良いのかわかりません。
ぐぐって最終行取得のコードまでは見つけたのですが、指定範囲に日付表示のコードを
見つけることが出来ませんでした。
お手数をおかけしますが、ご教授をお願いします。
0777デフォルトの名無しさん (ワッチョイ fa2f-LqCg)
垢版 |
2020/08/03(月) 21:49:07.37ID:QvK0nIgr0
>>773
自分で考える気なさそうだな
その拾ってきたコードのどこが分からんのだよ?

それが出来てそのあとどうする気か知らんが
CMBbox2.Clear
CMBbox2.AddItem (Sheet1.Cells(CMBbox1.ListIndex + 3, "L").Value)
これで、二度と来るな
0778デフォルトの名無しさん (ワッチョイ d68e-nhZs)
垢版 |
2020/08/03(月) 21:53:06.72ID:cM5/PGxb0
また馬鹿が出てきた
0781デフォルトの名無しさん (ドコグロ MM9a-kmLJ)
垢版 |
2020/08/03(月) 23:40:17.65ID:hUMORhdPM
forなんて使わなくてもいいんじゃね

Sub test()
Dim i As Long
i = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(i + 1, 1), Cells(i + 150, 1)) = Date
End Sub
0783デフォルトの名無しさん (ワッチョイ 5d01-UdrD)
垢版 |
2020/08/04(火) 00:12:45.83ID:brj+kH5Y0
>>780
ありがとうございます!
あとは自力で頑張ってみます!
0784デフォルトの名無しさん (ワッチョイ 5d01-UdrD)
垢版 |
2020/08/04(火) 00:17:38.16ID:brj+kH5Y0
>>781
解答ありがとうございます!
1つの答えに対し複数のコードがあるって面白いですね!
初歩的なコードが書けるよう頑張ってみます。
0786デフォルトの名無しさん (ワッチョイ d68e-nhZs)
垢版 |
2020/08/04(火) 01:06:00.92ID:8QweQuKX0
>>784
死ねよ
0787デフォルトの名無しさん (ワッチョイ 79ce-Xvfy)
垢版 |
2020/08/04(火) 02:59:27.48ID:o+2T/J1u0
RNDやRAND関数は疑似乱数だから公平じゃない
そもそもコンピューターで乱数を生成するのは不可能

知識としては知ってるけど、代替手段を考えるのも面倒だしみんなRNDを使ってるから別にいいんだよ、ってこと
0789デフォルトの名無しさん (ワッチョイ 794e-wQ/k)
垢版 |
2020/08/04(火) 06:07:40.64ID:vydsY05j0
同じシード与えたら同じ乱数列吐くよね。
で?何のためにあるって?
0794デフォルトの名無しさん (ワッチョイ 5d01-UD9X)
垢版 |
2020/08/04(火) 09:23:33.17ID:Lx6h4ngm0
数式で「真の乱数」を発生させることは不可能でしょ
何かしらの雑音を外部から取り入れるならあり得るけど

しかし真の乱数と区別できない疑似乱数というのはある
たかだか数万個の乱数を発生させる程度なら普通にRANDで構わんよ
コンピューター空間内(例えば64bit)なら32bitの疑似乱数を発生させ得る
0796デフォルトの名無しさん (ワッチョイ 7a4f-1TqB)
垢版 |
2020/08/04(火) 12:47:00.19ID:aUyBUHRY0
>>794
数式で真の乱数を発生させることが出来ないのは多分そう。ただ、それでも真の乱数は発生出来る。

ただ、かなり特殊な環境で言語的にもかなり特殊なのでVBAだけやってる人にはまぁ分からないだろう。

ただそれは、一度世界で最も出回ったハードであり言語でもあって、それでは乱数を求めるのに至極当たり前の方法でもあったから
このスレにいるおじいちゃんにはひょっとして知ってる人もいるかも知れない。
0798デフォルトの名無しさん (JP 0H62-3SEW)
垢版 |
2020/08/04(火) 13:32:34.79ID:Z82jJjcAH
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

☆ VM + ASM を書いた (C#, DX) * x86 ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
0805デフォルトの名無しさん (バットンキン MM2d-6wop)
垢版 |
2020/08/07(金) 19:45:16.94ID:Gk+vywdrM
スレチだったらスマソだけど、excelのスピル?のせいで、ver違うexcel間で共有してたファイルが勝手に配列やら@やら数式が変換されてバグってんだけど、これ無効にできないの?
0806デフォルトの名無しさん (アメ MM75-cUya)
垢版 |
2020/08/07(金) 20:09:47.44ID:l761nrW2M
>>805
キミにピッタリな格言を贈ろう。
It is no use crying over spilt milk
0811デフォルトの名無しさん (ワッチョイ 0101-FoHg)
垢版 |
2020/08/07(金) 22:08:09.38ID:TxGR6Whm0
旧バージョンの配列式に勝手に@が付くのは仕様じゃねえの
旧verの {=a1:a3} が新verでは =@a1:a3 に変換される
新verのスピル式 =a1:a3 は旧verでは {=a1:a3} に

VBA的にはFormulaプロパティとFormula2プロパティを使い分けることによって新旧verどっちにするかを指定できる
0817デフォルトの名無しさん (ワッチョイ 13ad-e++8)
垢版 |
2020/08/09(日) 13:28:26.53ID:w6SyFcxE0
セルA1~A5に1~5が入っていて、5個のaverage=3ですが、
1) 複数の連続セルを選択することで同じ動作をするfunction
2) function 自作平均値(セルを1個指定する as ???, 上のセル数 as byte, 下のセル数 as byte) as double
で、=自作平均値(A3, 2, 2) としたら同じ結果を得る関数
ってそれぞれどう書けばよいでしょうか。
値を直接入力する予定はなく、セルアドレスを取得できれよいかと思いますが、
方法がわかりません。
参考urlでかまいませんので教えてください。
0821デフォルトの名無しさん (ワッチョイ 1b8c-Ea0s)
垢版 |
2020/08/09(日) 23:01:18.40ID:1ZjA1+PB0
>>817
Function 自作平均値(セルを1個指定するAs Range, 上のセル数, 下のセル数)
自作平均値 = Application.WorksheetFunction.Average(セルを1個指定する.Offset(-上のセル数).Resize(上のセル数 + 下のセル数 + 1).Value)
End Function

文章が意味不明なんだけどこんな感じでいいの?
0822デフォルトの名無しさん (ワッチョイ 59ce-IIsV)
垢版 |
2020/08/10(月) 01:01:45.89ID:rZUUjilg0
>>819
Excelの画面をビデオ録画する操作はExcelを起動してから田+Alt+R
ただしVBEのウィンドウは開いても重ねても録画されないので、ワークシート上にマクロの起動ボタンを置いておく必要がある
0828デフォルトの名無しさん (アウアウウー Sa55-h0ig)
垢版 |
2020/08/11(火) 02:22:17.18ID:w/eGi/vSa
VBAの知識は全く無いけど無駄な事は少しでも省きたい
そこで質問なのですが、複数の結合されたセルの値を一括でクリアしたい時
Range(“A1”).MergeArea.ClearContents
Range(“A2”).MergeArea.ClearContents
Range(“A3”).MergeArea.ClearContents
Range(“A4”).MergeArea.ClearContents
ひたすら続く

これを短くするにはどうすれば良いでしょうか?
0831デフォルトの名無しさん (ワッチョイ eb8e-bBGy)
垢版 |
2020/08/11(火) 03:10:45.62ID:iwyIkneF0
>>830
死ね
0842デフォルトの名無しさん (ワッチョイ 1302-2X+j)
垢版 |
2020/08/11(火) 15:03:15.53ID:3p+RdAeo0
Clearはセルに入力されてる数式や値、そして設定されてる書式もすべて消す
.ClearContents は数式と値のみクリア、書式は残る
.Value=Emptyはニュアンスが逆で"何も無いを入力"、つまり消す。.ClearContentsと同じ

deleteキーは.ClearContentsや.Value=Emptyと同じ
0845デフォルトの名無しさん (ワッチョイ 2e7b-PxzN)
垢版 |
2020/08/12(水) 02:04:20.40ID:ArSORnRx0
>>834-844 ありがとうございます!
皆さんが言うように全くの知識ゼロですが色々検索してなんとか思った通りのボタンが完成しました。
しかし全角やらスペースやら分かり辛いプログラムって難しいですね...
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況