20/05/10 13:43:45 Nkoph0aj.net
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part65
スレリンク(tech板)
※デフォルト設定
2:デフォルトの名無しさん
20/05/10 14:01:00 DMAkCTap.net
馬鹿はお断りです
3:デフォルトの名無しさん
20/05/10 14:06:35 fjy5hAwc.net
>>2
ここには馬鹿しか来ませんよ
貴方と私を含めて
4:デフォルトの名無しさん
20/05/10 14:40:29 6j4C5UpV.net
相談させてください。
あるデータ群に対して、データの大小が分かりやすいように
「条件付き書式」→「カラースケール」でセルの色付けをしています。
セルに色付けた後に、セル中の数字が邪魔で、数字を見えなくしたいと考えています。
最初考えたのは、各セルに対してセル色と同色のフォント設定をすればよいと思いました。
が、どうも条件付き書式でつけられたセルの色は、セルの色ではないらしく
.Interior.Color→色なし(16777215)、とのことで詰まってしまいました。
カラースケールで色付けた後に、文字が見えなる方法について存知の方、
アイディア思いつく方いましたらご教授お願いいたします。
5:デフォルトの名無しさん
20/05/10 15:15:18 kwQy/6Oy.net
表示形式を ;;; にする
6:デフォルトの名無しさん
20/05/10 15:54:19 mjv4KBjx.net
最初からデータは別の位置に書いて色付けしたいセルは空白のままにしときゃいいんじゃね
7:デフォルトの名無しさん
20/05/10 15:59:47 CxQ0TYrj.net
ID:KpBIrL5Ad
ID:74X5YOol0
ID:MibsCGor0
>バカと違って質問
8:の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。 >出来る奴は瞬時に何通りかは思いつく。 >もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。 >瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
9:デフォルトの名無しさん
20/05/10 18:27:55 6j4C5UpV.net
>>5
ありがとうございます。
思った通りの表示になってくれました。
勉強になりました。
>>6
返信ありがとうございました。
>>4でも書いた通りカラースケールでの色付けは、
セルに色をつけている訳ではないようなのです。
(カラースケールで色付けしたセルをコピー→書式のみ貼り付け、などで試すと分かるかと思います)
10:デフォルトの名無しさん
20/05/10 18:58:46.91 Nkoph0aj.net
>>8
セルに色を付けた場合、条件付き書式の条件が成り立った場合に指定した書式で上書きされる
11:デフォルトの名無しさん
20/05/10 22:53:46 EYEPvAyt.net
>>7
日本語勉強しろなwww
人の言ってることも理解出来ない、質問の意味も分からないじゃ話にならんよw
12:デフォルトの名無しさん
20/05/10 23:36:04.86 Jph/G5XN.net
>>1
ワッチョイ外すなよ…
13:デフォルトの名無しさん
20/05/11 00:07:01 mMUKFdwn.net
>>4
元々、そのデータ全部の文字を見えなくしたいなら条件付き書式で文字も背景色と一緒にすれば可能だけどお勧めはしないね。
14:デフォルトの名無しさん
20/05/11 00:39:33 ezdiPeRt.net
>>10
そうだな、日本語勉強して自分で書き込んだ↓の意味を整理して答えてくれww
ID:KpBIrL5Ad
ID:74X5YOol0
ID:MibsCGor0
ID:EYEPvAyt
>バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。
>出来る奴は瞬時に何通りかは思いつく。
>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
15:デフォルトの名無しさん
20/05/11 07:43:54.86 bK9/OgSI.net
>>13
まだ分かって無かったの?
5通り思いつくなんて言って無いんだがw
16:デフォルトの名無しさん
20/05/11 09:32:52.11 ezdiPeRt.net
>>14
じゃあ具体的に何通り思い付くんだよw
ww
で、それが最善じゃないのか?できる奴の癖にww
>出来る奴は瞬時に何通りかは思いつく。
>出来る奴は瞬時に何通りかは思いつく。
>バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。
>バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。
ID:KpBIrL5Ad
ID:74X5YOol0
ID:MibsCGor0
ID:EYEPvAyt
>バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。
>出来る奴は瞬時に何通りかは思いつく。
>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
17:デフォルトの名無しさん
20/05/11 12:22:41 lwYcgX7G.net
中坊の喧嘩だなw
18:デフォルトの名無しさん
20/05/11 12:31:54 bK9/OgSI.net
>>15
やっと理解出来たようだな。
勝手な思い込みで先走るのはいかんね。
理解出来たら、勝手な思い込みで迷惑かけてるんだから謝罪するのがまともだと思うがw
具体的って、そんなの内容によるわな。
最善って、だからその場合は1通りだが、条件等で最善は変わるから条件が詰められて無ければ1通りじゃ無いぞ。
ここみたいな質問の場合は条件が詰められて無いことも多いしな。
具体的な例なら今は無理だから帰りの時だな。
19:デフォルトの名無しさん
20/05/11 13:33:17 ezdiPeRt.net
>>17
>>14
具体的に何通りだよw
言うことブレブレすぎだww
お前は「言ってることがブレブレでごめんなさいもうしません」って謝れよww
それともあれか?「質問の意味がわかってないバカです」て認めるか?ww
>出来る奴は瞬時に何通りかは思いつく。
>バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。
ID:KpBIrL5Ad
ID:74X5YOol0
ID:MibsCGor0
ID:EYEPvAyt
>バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。
>出来る奴は瞬時に何通りかは思いつく。
>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
20:デフォルトの名無しさん
20/05/11 13:36:33.50 P+KlkuxK.net
まだやってたのか
21:デフォルトの名無しさん
20/05/11 13:49:01 ezdiPeRt.net
自称「できるやつ」の名言集w
でもこいつは回答にコードも出さない素人以下ww
ID:KpBIrL5Ad
ID:74X5YOol0
ID:MibsCGor0
ID:EYEPvAyt
ID:bK9/OgSI
(1) 最善の方法が唯一になると明言w
>「バカと違って」質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。
(2) できる奴は何通りも思い付くw
>出来る奴は瞬時に何通りかは思いつく。
(3) 唯一になるといった直ぐあとに手のひらクルーww
>最善って、だからその場合は1通りだが、条件等で最善は変わるから条件が詰められて無ければ1通りじゃ無いぞ。
(4) 唯一のできるやつの最善の方法が改善できるとかww最善じゃねえww
>瞬時に5通り思いついたとして、5年後に知らない技術を獲得した時に、あの時これ使えばもっと良くなったなあと思うとか。
(5) そしてプライド高そうなベテラン自慢ww
>もっとも、これ10年以上前の話だし、それで修正するとかいう話でもないけどな。
22:デフォルトの名無しさん
20/05/11 14:49:47 lwYcgX7G.net
あぼ~ん機能って便利だな
23:デフォルトの名無しさん
20/05/11 18:48:04.13 oJQz2woi.net
俺より馬鹿なやつっているんだな
みっともない喧嘩だねぇ
24:デフォルトの名無しさん
20/05/11 19:14:46.82 lwYcgX7G.net
粘着はたちが悪いからな
25:デフォルトの名無しさん
20/05/11 19:17:32.38 r23wnlJu.net
このスレのおかげで自殺者が2人減ったと思えば我慢できるだろ?
いや、そうでもないか
何が楽しくて生きているのだろう
26:デフォルトの名無しさん
20/05/11 21:28:55 bK9/OgSI.net
>>18
全くブレて無いんだがw
最初から何通りかは思いつくと言ってるだろw
最初から具体的に何通りなどと想定していない発言だ。
内容によって3通りになる場合もあれば5通りになる場合もある。
それに最適と考える1通りの場合だってある。
←これがあるから「何通りかは思いつく」の発言で、「最適の1通りの場合もありうる」等と追加して全ての状況に対応する必要は無い。
こんなのは日本語扱っていれば当然の話だからだ。
そうしないと、やり取り自体が出来なくなる。
お前の「ブレブレ」という単語の意味はどの辞書に載っているどういう意味なのか、そしてそういう説明をしていないからその不備をもって日本語が出来ていない等と突っ込むことなどという事態になってしまう。
だから相手の言っている意味を推し量ってやり取りをする必要があるし、俺もお前も実際にそうしてる。
しかし、お前の「・瞬時に5個思い付く(ドヤア)」は、「瞬時に5通り思いついたとして」の例示に対して、常に5通り思いつくと解釈したということだ。
これは完全にお前の日本語の理解が未熟だということを表している。
27:デフォルトの名無しさん
20/05/11 21:32:42 bK9/OgSI.net
そういうわけで「ブレブレ」なら俺の何処が「ブレブレ」なのかを示す必要がある。
そして、お前はまだ日本語の理解不足でかけた迷惑を謝罪していないな。
理解不足でないと言うなら、お前の「・瞬時に5個思い付く(ドヤア)」は日本語としてどういう解釈の後に成り立っているかを示す必要がある。
28:デフォルトの名無しさん
20/05/11 21:49:29.25 lwYcgX7G.net
>>24
いがみ合う二人を作ってしまうようなスレならば、無い方がいいのかもしれない
29:デフォルトの名無しさん
20/05/11 22:26:32 71O9fy8g.net
精度1ms程度、20ms間隔でイベントを発生させたいんですがVBAで使える良いタイマーは無いでしょうか
settimerでは精度も分解能も足りないようです。
30:デフォルトの名無しさん
20/05/11 22:47:05.78 Z5nXEgsW.net
>>28
その間止まってる?何か処理動いてる?
31:デフォルトの名無しさん
20/05/11 23:01:43.10 545F5kn8.net
そもそも高精度タイマーつかわんと、標準のタイマーで1msは無理なんだが
32:デフォルトの名無しさん
20/05/12 00:34:19 SrnItsWT.net
>>25
ブレてんじゃんww
できる奴なんだろ?
じゃないなら「私の"何通り"には1つでも含まれますごめんなさいもうしません」って謝れよww
あとコード付で答えたことないこともなw
>出来る奴は瞬時に何通りかは思いつく。
>バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。
>内容によって3通りになる場合もあれば5通りになる場合もある。
>それに最適と考える1通りの場合だってある。
お前はVBAならintもint()も同一視するのかよww
素人めw
1個か3個か5個か、断言も出来ない臆病者めww
33:デフォルトの名無しさん
20/05/12 00:41:52 SrnItsWT.net
>>25
言い訳がましいんだよなww
>最初から具体的に何通りなどと想定していない発言だ。
→普通ツッコまれるから想定するんだよなあw
>内容によって3通りになる場合もあれば5通りになる場合もある。
それに最適と考える1通りの場合だってある。
→
34:最適は1つじゃないのかねww それとも要件がわからないから最適と言えませんぴえーんとか社会で言ってるのかww >←これがあるから「何通りかは思いつく」の発言で、「最適の1通りの場合もありうる」等と追加して全ての状況に対応する必要は無い。 →後だしで言い訳ww それまでずっと「何通りか」を固持してるのになww >お前の「ブレブレ」という単語の意味はどの辞書に載っているどういう意味なのか、そしてそういう説明をしていないからその不備をもって日本語が出来ていない等と突っ込むことなどという事態になってしまう。 →頭固いねえw日本語の由来とかにこだわって嫌われるタイプだろwwww そんなんだからずっとVBAおじさんなんだよw >しかし、お前の「・瞬時に5個思い付く(ドヤア)」は、「瞬時に5通り思いついたとして」の例示に対して、常に5通り思いつくと解釈したということだ。 →じゃあ「何通りか思いつく」は具体的に何個なんだよww 腹くくってきめろやww
35:デフォルトの名無しさん
20/05/12 00:51:58.58 SrnItsWT.net
>>31
面白いよなww
仮に結論をそっちに寄せると、
今までの発言が全て、
「瞬時に思い付きます。でもそれは1通りでもあるし複数通りでもあるし、思い付かないかもしれません」
とかいう、「私は10年以上のベテラン(笑)だけど雑魚です」って告白するような発言になるんだぜww
こんなちょろいやつ初めてだわw
サンプルコードも出せないわけですわww
36:デフォルトの名無しさん
20/05/12 07:39:51 I4uaPjG2.net
>>31
だからどこがブレてんだよwww
さっさと指摘しろな。
最初から場合によると言ってるがw
お前はIf文やSelect文を使えないのか?
37:デフォルトの名無しさん
20/05/12 07:42:40.74 I4uaPjG2.net
>>32
www
お前の考えだと頭が固くなるという話をしたのにw
そんな頭の固い話じゃ会話にならねえと言ってる。
あいかわらず日本語が未熟だなw
38:デフォルトの名無しさん
20/05/12 07:45:00.31 I4uaPjG2.net
>>33
全てに対応したやり取りなんて出来ないし、誰もやってないと言ってるんだ。
お前も出来ていない。
まともな奴ならそういう前提で会話してる。
39:デフォルトの名無しさん
20/05/12 07:47:08.17 I4uaPjG2.net
>>33
ところで、「・瞬時に5個思い付く(ドヤア)」が間違ってたことについては無視か?
触れて欲しくない?
そういうわけにはいかんぞ。
散々迷惑かけてるんだからな。
40:デフォルトの名無しさん
20/05/12 07:50:53.21 FFR24bht.net
>>33
これだけはその通りで草
41:デフォルトの名無しさん
20/05/12 08:13:35.16 FFR24bht.net
>>34
VBA10年おじさん大発狂の4連投してて草
高血圧だな、体は大事にしろよw
>だからどこがブレてんだよwww
自分が日本語分かってねえじゃねえかw
「場合による」は後だしだぞww何通りかは思い付くの時点で名言してるか?ww
>お前の考えだと頭が固くなるという話をしたのにw
お前のは表現のゆらぎじゃなくて、明確にずれてんだよw
ほら、1個か3個か?臆病者めwww
>全てに対応したやり取りなんて出来ないし、誰もやってないと言ってるんだ。
10年おじさんなら最適解出せるだろ?w
「瞬時に思い付きます。でもそれは1通りでもあるし複数通りでもあるし、思い付かないかもしれません。私は10年以上のベテラン(笑)だけど雑魚ですすいません」って告白してもいいぞw
>ところで、「・瞬時に5個思い付く(ドヤア)」が間違ってたことについては無視か?
最初から何個か名言しない臆病者のせいで仮に特定してあげてるだけだよww
お前のせいじゃんwww
5個のところ好きな数字にしろよww
数字特定したら次はほんとに「瞬時に思い付くか」テストしたげてもいいなw
てか>>28にも答えてないしなw
10年以上やってるのにww
42:デフォルトの名無しさん
20/05/12 12:29:54 I4uaPjG2.net
>>39
間違いを認めるか、間違って無い根拠を示せ。
逃げようとしてるのミエミエだぞw
↑もうこれを示さない限り先には進まん。
43:デフォルトの名無しさん
20/05/12 13:47:56 8FYlmiYH.net
>>40
言い返せないことを認めた負け宣言あざっすww
>>28もわかんないんだもんなw
よっわ、こりゃVBA10年おじさんだわww
44:デフォルトの名無しさん
20/05/12 13:53:42 8FYlmiYH.net
これに懲りたらてきとーなこと言ったり「10年以上前だけど(ドヤア)」とか言うの控えとけよww
こうやって恥かくからなww
あ、でもまた数年後思い出して修正するんでしたっけww
こいつのプロダクトとかアウトプットは信用できないなww
45:デフォルトの名無しさん
20/05/12 16:56:54 rA4rVxbw.net
その熱量を分けてくれ
46:デフォルトの名無しさん
20/05/12 17:47:19 kYSBNuZD.net
ここで教わった「空白になるまで」とか
「空白じゃな�
47:ッれば」 って言うのが自分の職場で凄い役に立って多用してますわ ケースによるんだろうけどこれが当たり前なのかあまり使わない方がいいのはわからない Sub 空白まで処理 () Dim gy As Long Do while cells(gy, 5) <> "" 何かの処理 gy = gy + 1 loop End Sub Sub 作成者を入力させる () Dim Ib As String Ib = Inputbox ("フルネームで入力して下さい","作成者","") If Ib <>"" Then Range("A4").value = Ib Else Msgbox ("後で入力して下さい",vbokonly,"作成者欄") End If End Sub ここら辺とか職場で多用してたら俺です。 あと色々覚えて作ってて思うのが絶望的に変数の名付け方にセンスが無い… データ型は深く覚えなくてもいいってサイトで見たけどVbMsgBoxResultとか前スレで教えたくた人のおかげで役立ってるし多分覚えた方がいいデータ型も結構あるんだろうなぁと
48:デフォルトの名無しさん
20/05/12 18:29:41.52 mEZSl2qw.net
if文ってスゲー便利!って言ってるのと変わらんぞ
条件ループなんてプログラミング言語として最低限の必須機能
49:デフォルトの名無しさん
20/05/12 18:56:23 kYSBNuZD.net
>>45
変わらんぞというかまさにそこに感動してるレベルの入門者ですよ
ただ毎日コードを何かしら書かないとすぐ忘れ書き方のルールを忘れちゃいますわ
ある程度多用する基本的なコードは自分でテンプレ作ってそこから引用してるから
必要なコードは必要な時だけそこから引っ張れば良いという人ももいたけどやっぱこのマクロ作ろうと思ってカタカタと悩まずに打って作れるようになりたいですね
50:デフォルトの名無しさん
20/05/12 19:58:51 +ufJa1rh.net
>>44
繰り返しの内側やIF文の内側ではインデント(字下げ)すると読みやすくなる
あと個人的には変数宣言(Dim)の下に空行入れてる
51:デフォルトの名無しさん
20/05/12 20:04:14 DpVh1gfo.net
システムにお願いしても駄目ならプロセスのプライオリティを
思い切り上げて他のプロセスをできるだけ起動させないとか。
52:デフォルトの名無しさん
20/05/12 20:42:29 UaCqmgBQ.net
>>44
書けないとか忘れるなんて言ってるけどただのネタだろ?
普通にコピペしたら Msgbox とはならない
自動的に MsgBox に修正されるからな
53:デフォルトの名無しさん
20/05/12 20:49:40.88 kYSBNuZD.net
>>49
いや、ここでのレスは手打ちだよ
そのぐらい練習癖つけないと忘れちゃう
とにかく体に無意識に覚えさせたい
54:デフォルトの名無しさん
20/05/12 20:54:41 UaCqmgBQ.net
は?手打ちならVBEに入力しなきゃ意味ないだろう
それとも常時Excelに触ることができない環境でイメージトレーニングでもしているの?
それならキーボードじゃなくて手書きをお勧めするよ
55:デフォルトの名無しさん
20/05/12 20:57:51 +ufJa1rh.net
自治厨うざっ
56:デフォルトの名無しさん
20/05/12 21:00:50 kYSBNuZD.net
いやVBE触りながらスマホで2ちゃんもやってるんよ
家帰ってダラダラしたいのに勉強しなきゃという強迫観念すらあるんですわ
そのぐらい使いこなせるようになりたひ
57:デフォルトの名無しさん
20/05/12 21:01:39 I4uaPjG2.net
>>41
逃げるのかねwww
間違いを認めるか、間違って無い根拠を示せ。
58:デフォルトの名無しさん
20/05/12 21:03:00 UaCqmgBQ.net
へー、スマホで打ち込んだのか
スゲーな
尊敬するわ
59:デフォルトの名無しさん
20/05/12 23:00:42 E9stGPs+.net
プログラミングはif文に始まりif文に終わる
60:デフォルトの名無しさん
20/05/12 23:09:10 wZ0jz+Fj.net
endifで終わるとか言ってみる
61:デフォルトの名無しさん
20/05/12 23:41:32 +oXZY/9K.net
スマホは本当に入力がむずかしい
iphoneだけど、@ とか ? とか ; とか、
半角と全角を見分ける方法ないですかね
62:デフォルトの名無しさん
20/05/12 23:46:48 afM3cpmW.net
>>58
馬鹿は消えろ
死ね
63:デフォルトの名無しさん
20/05/13 00:01:32 J5ZD6qBk.net
>>58
表示フォント変えられないのか?
64:デフォルトの名無しさん
20/05/13 08:48:22.54 EdihJer9.net
>>41
なんだ、敗走か?
言い返せなくなると敗走?
「・瞬時に5個思い付く(ドヤア)」が間違ってたことに反論出来なくて敗走?
65:デフォルトの名無しさん
20/05/13 14:24:20 MXc7+Bkx.net
>>58
俺より馬鹿じゃないから気にしなくて良いよ!
66:デフォルトの名無しさん
20/05/13 16:28:05 plPxHhzS.net
VBA7以前でPtrSafe付コードを修正する際にコンパイルエラーを避けるには、該当箇所を一つずつコメントアウトしないといけないのでしょうか
67:デフォルトの名無しさん
20/05/13 19:05:47 LXKghMMB.net
'変数cに列番号が記録されており、その右隣の列から右に向かって最終列(変数LastCol)までに一つ目の文字列"型式"がある1つ手前の列番号を変数ccに記録したいのですが、これであってますか?
cc = Range( c : LastCol ).Find("型式").Columns - 1
68:64
20/05/13 19:07:10 LXKghMMB.net
↑1行目だけでする場合をお願いします
69:デフォルトの名無しさん
20/05/13 19:55:58.54 y5a8J0I9.net
検索条件が甘いのと見つかんないとエラーが出るのが問題だけど
cc = Range(Columns(c + 1), Columns(LastCol)).Find("型式").Column - 1
70:デフォルトの名無しさん
20/05/13 19:57:35.91 53iRH1vl.net
有ってない
71:64
20/05/13 20:29:22 LXKghMMB.net
>>66
ありがとうございますm(__)m
72:デフォルトの名無しさん
20/05/14 10:15:33 PW5MRjsJ.net
>>41
結局、勝ち負けだけで論理的に正しい間違いはどうでも良い奴だったな。
こういう奴は確かに拘ることをしないからいつまでたっても初心者を脱っすることが出来ない。
実際には言い負かされてるんだが言い負かされなかった形だけあれば満足すると。
こういう糞がどこで自尊心を保っているのか全く理解出来んw
73:デフォルトの名無しさん
20/05/14 10:46:53 n+ookAJT.net
基地外同士のケンカがやっと終わったか
最初に引いた奴の方が偉いな
はい次の方
74:デフォルトの名無しさん
20/05/14 14:49:40 PW5MRjsJ.net
>>70
悔しいのか?
75:デフォルトの名無しさん
20/05/14 15:41:22 uf0GqGLY.net
>>71
くやしいです!!
URLリンク(stat.ameba.jp)
76:デフォルトの名無しさん
20/05/14 19:23:42 gToX6xvs.net
ネットで拾ったコードをつぎはぎ足してoffice2010のExcelで使ってたけど
今年会社がやっと2019に上げるらしい
使えなくなるコードがあったら終わるわ
77:デフォルトの名無しさん
20/05/14 20:29:36 Q92dSSfg.net
32bit→64bitならエラーが出るかもだが、それ以外は特に変更はないはず
78:デフォルトの名無しさん
20/05/14 21:48:19.93 I7glJUMv.net
クラス化して再利用考えて作ってたのですが、getter経由で取得したデータを処理したり、ボタン関係の養生したり、フォームに描画反映したりでユーザーフォームにコードが集中してしまいました
構造が悪いのでしょうか
ユーザーフォーム
-ボタンイベントコールバッククラス
-シートのデータ書き換えクラス
-割込タイマークラス
-シリアル機器インターフェースクラス
--各機器のラッパークラス
---COMポートクラス
79:デフォルトの名無しさん
20/05/14 21:52:56.60 pdcPp9kM.net
>>75
何でクラス化したのにフォームに集中するの?
寧ろクラスに分割されるんじゃなくて?
80:デフォルトの名無しさん
20/05/14 22:15:42 Q92dSSfg.net
>>75
単純にGetter以外のメソッドを実装すればいいのでは?
81:デフォルトの名無しさん
20/05/14 22:42:08.69 tZ6/JvsB.net
>>73
MDIとSDIの違いに気をつけて
82:デフォルトの名無しさん
20/05/14 23:22:45 gToX6xvs.net
ユーザーフォームは俺のようなVBA超初心者にとって憧れだわ
ある程度マクロ作ったら
とりあえずThisWorkbookのとこで
Private sub Workbook_Open()
UserForm1. Show
End Sub
を作って
ユーザーフォームのShowModalをFalseにする
↓
で使えるのはコマンドボタンという…
ボタンクリックに標準モジュールで作ったプロシージャ名を貼り付けると…
毎回これじゃそりゃ上達しないわ
もっとコード覚えて効率的な高見を目指したいところだけど脳がついていかない
83:デフォルトの名無しさん
20/05/14 23:30:25 Q92dSSfg.net
>>79
それで十分
84:デフォルトの名無しさん
20/05/14 23:40:56.55 gToX6xvs.net
>>80
いや、流石にこれじゃいかんわ情けないと自覚
標準モジュールにあるプロシージャが自作のコードならまだしもマクロの記録を無駄な動きだけ消して貼り付けたりネットのをパクって少しいじったりするだけ
ユーザーフォームもコマンドボタン以外に使い方わからず使ってないし
CSVやtxtを読み込んだりとかそういう特殊な事書ける人は凄いわ
若い頃から情報システムとかそういう勉強すればよかったわ
英語 資格 PCスキルの時代は変わらんね
85:デフォルトの名無しさん
20/05/14 23:50:14.00 I7glJUMv.net
>>76>>77
ポーリングしてる機器Aの状態に応じて機器B、Cに異なるコマンドを送ってデータを取得する様な処理が何通りか合って多くなってます。インターフェースクラスとの間に処理クラスみたいなのを入れるのでしょうか
86:デフォルトの名無しさん
20/05/15 00:17:59 qMmlu16O.net
>>82
データの取得をクエリサービスクラスに分離してください
フォームクラスはフォーム自身の管理とサービスの呼び出しだけを行うものです
87:デフォルトの名無しさん
20/05/15 00:41:48 ZviQyBFQ.net
>>81
今はボタン使うマクロしか作る予定がないだけだと思うが。
csvを使うマクロが必要になった時に調べるだろうし、
今は知らないからって自虐的になる必要ないんでは?
>>82
一般的にオブジェクト指向は「最終的にやらせたいこと(=やれること)」をメソッドとしてクラスに定義にして、
そのための条件や必要なデータなどはクラス自体が判断したり取得したりするか、引数として与える
もし、Getter等でデータをメインルーチンに集めて統合的に処理するなら従来の手続き型になる
今回の例で言えば、
機器BCからから受け取ったデータを処理するPublicメソッドを定義したクラスを作って
機器Aに応じて機器BCにコマンドを送ったりっていった処理は、そのクラス内でやるのがいいかも
88:デフォルトの名無しさん
20/05/15 01:33:02 PClFYiSI.net
ExcelフォームにExcelグリッドコントロールがあればむてきだたかもしれない
89:デフォルトの名無しさん
20/05/15 01:38:53 BHVdwBuM.net
割り込みとかコールバックとかわからないシロートの発想で笑える
90:デフォルトの名無しさん
20/05/15 01:42:44 h8nORdF5.net
>>84
CSVを扱う�
91:K要性がじりじり迫ってるんだけどネットにあるコードの窃盗常習犯で覚える脳みそがないからノースキル野郎 当然モチベもないから全然進んでない ?ダイアログで任意のCSVデータを選択して それを今開いているシートに読み込まれる(CSVデータは読み込んだ後に自動で閉じる) (元々シートにグラフがあるがそれはそのまま) ?このシートをブック内の一番右にシートをコピー 多分?はどこかで拾えそうだけど?のプロシージャがありそうでなかなかネットから盗めず激ムズ ここの勉強できる人達は勝ち組だよ
92:デフォルトの名無しさん
20/05/15 02:20:59 +1dt40Gj.net
勝ち組かどうかは別問題だな
93:デフォルトの名無しさん
20/05/15 09:02:28 uW7fixd9.net
非表示のシートがいくつかある状態で、一番右端のシートをアクティブにしたいのですが、worksheets.countで取得しようとすると、非表示のシートが選択されてしまいます
表示されているシートの一番右端をアクティブにするにはどうすればいいですか?
94:デフォルトの名無しさん
20/05/15 09:32:08 uW7fixd9.net
質問がおかしかったので書き直します
マクロブックでなくアドインでやっています
一番右端のシートから値を取ってきて、その後に作成する新規のシートに貼り付けたいです
Sheets(WorkSheets.Count).Activateで、表示上の一番右端のシートをアクティブにすることはできるのですが、操作ができません
非表示のシートがいくつかあり、シート番号は若くてもそちらがWorkSheets.Countで選ばれているようで、値はそこから取ってきてしまっているみたいです
エクセルの表示上のシートの並びで、一番右端を選択してそこから値を取りたいのですが、どうすればいいでしょうか?
95:デフォルトの名無しさん
20/05/15 09:38:25 /bb/ZDbJ.net
For i = Worksheets.Count To 1 Step - 1
If Worksheets(i).Visible Then
Worksheets(i).Activate
Exit For
End If
Next
96:デフォルトの名無しさん
20/05/15 12:19:24 Ras8zr0W.net
>>91
あー、なるほど
カウントを減らしていって最初にヒットしたVisibleでループを抜ければいいんですね
助かりました、ありがとうございます
97:デフォルトの名無しさん
20/05/15 12:51:25 wvzrJYUA.net
シート1にラベルやタイトルや色を設定した
雛型になるグラフがあって
それをアクティブなシートにコピーして貼り付けられる事コード、もし出来れば教えて下さい。
今はシート1に戻ってグラフをコピーして
貼りたいシートに戻って貼り付け
をやってます
数値は反映させなくて雛形になるグラフをとにかくすぐにアクティブなシートに持ってきたいです
マクロの記録でもやり方わからずです…
シート1にある("グラフ1")というのを
アクティブなシートに貼り付け、わかりませぬ
98:デフォルトの名無しさん
20/05/15 13:03:29 ChXNP+/8.net
Ruby なんか、こういう感じで、CSV ファイルを1行ずつ処理していくだけ。
GUI で処理すると、Rubyよりも何倍も難しい
require 'csv'
file_path = ARGV[ 0 ]
# 引数には、ファイルパスを渡す。input.csv
# CSV ファイルを、1行ずつ処理する
CSV.foreach( file_path ) do |row|
puts "#{ row[ "col_1" ] } : #{ row[ "col_2" ] }" # 列1・列2
end
99:デフォルトの名無しさん
20/05/15 17:00:34 WgI7x3A0.net
シート1にあるグラフ1をアクティブシートにコピペ
調べてみたところ結局俺がやりたいのはシンプルにこれか
マクロの記録だと限界あるわ。
100:デフォルトの名無しさん
20/05/15 19:22:44 h8nORdF5.net
Sub 数値反転()
Dim ms As VbMsgBoxResult
Dim gg As Long
ms = MsgBox("マイナス値?", vbYesNo, "B列C列を確認")
If ms = vbYes Then
gg = 113
Do While Cells(gg, 2) <> ""
Cells(gg, 17) = Cells(gg, 2) * -1
Cells(gg, 18) = Cells(gg, 3) * -1
gg = gg + 1
Else
Do While Cells(gg, 2) <> ""
Cells(gg, 17) = Cells(gg, 2)
Cells(gg, 18) = Cells(gg, 3)
gg = gg + 1
Loop
End If
End Sub
ドヤ顔でいけるだろと思ったらnoを選択するとElseの次のDo whileのところでエラーになりますけどどう手直ししたらいいですか
101:デフォルトの名無しさん
20/05/15 19:26:11 B9XmHC3V.net
>>96
vbNoのとき、ggはいくつ?
102:デフォルトの名無しさん
20/05/15 19:30:22 h8nORdF5.net
>>97
レスした後にvbnoの時のgg入れ忘れてたと思ってElseの後に
gg=113を入れたけどやっぱりエラーになりました
根本的にルールが間違ってます?
103:デフォルトの名無しさん
20/05/15 19:39:43 RYV/7Uuu.net
1つめの Do while に対応する Loop がない
104:デフォルトの名無しさん
20/05/15 19:49:26.82 h8nORdF5.net
>>99
ほんと恥ずかしすぎるミスでした。
ありがとうございます。
間違っといてなんだけど自分の考え方が間違ってない事もわかってホッとしました。
何言ってんだこいつと思われて当然ですがそんな気持ちです
105:デフォルトの名無しさん
20/05/15 20:01:55 BHVdwBuM.net
>>100
そもそもそれ以前に馬鹿過ぎて話にならない
106:デフォルトの名無しさん
20/05/15 20:42:05 SPdgeRtp.net
インデントで分かったりしないもんかね
107:デフォルトの名無しさん
20/05/15 20:58:58.45 Syu0A9me.net
VSのエディタなら勝手にやってくれるけどExcelVBEはそこまで親切じゃないから、
・Doと書いたら、中間の処理書く前にLoopをセットで先に書く。
・中間の処理はインデント付ける
こうしないと長い処理だとミスる。
108:デフォルトの名無しさん
20/05/15 21:24:59 1l79UUQc.net
田中先生ユーチューバーになってたんか。
エクセル系ユーチューバーは前からいるけど
彼らのチャンネル登録者数どんどん抜いてくな。
マクロ以外にもエクセルの機能全般もアップしてるし
他のエクセルユーチューバ―はもう躍進することはないな。
ご愁傷さま。
109:デフォルトの名無しさん
20/05/15 21:26:28 xUEF26i7.net
インデントしてるとVBEが勝手に空行にもインデント用スペースいれやがる
110:デフォルトの名無しさん
20/05/15 22:51:12 B9PySqRq.net
マクロの処理だけmsオーダーで止めて、シートでの作業には影響させない方法ってありますか?
sleepやapplication.waitを使うと、止めている間はマウスポインタが待機中に切り替わって気が散ります。
111:デフォルトの名無しさん
20/05/15 23:02:13 RYV/7Uuu.net
意味が解らん
112:デフォルトの名無しさん
20/05/15 23:07:56 b6XlKvF2.net
DoEvents を定期的に入れてあげて妥協するのがいいのでは
113:デフォルトの名無しさん
20/05/16 00:10:47.87 DWLUsoam.net
気が散るほうが悪い
114:デフォルトの名無しさん
20/05/16 00:24:20.49 dnsCYCpT.net
waitが長いと入力作業とかできんだろうな
マルチスレッドできたっけ?
115:デフォルトの名無しさん
20/05/16 00:27:49.65 PCcdgCy6.net
>msオーダー
ジェイッ、ジェイッ、ジェイッ、ジェイッwwww
>>107
俺もわからん。
どういう意味だろう。
116:デフォルトの名無しさん
20/05/16 00:41:23.65 W7xr4LsN.net
馬鹿は全角英文字、自分勝手な略語を使う法則
117:デフォルトの名無しさん
20/05/16 02:12:04 PXYVKn+N.net
非表示にすれば気にならないとか?
118:デフォルトの名無しさん
20/05/16 02:34:42 LVL/9uGV.net
msオーダーって何?
119:デフォルトの名無しさん
20/05/16 05:07:24 VHZcBZeD.net
マイクロ秒で処理するってことかな?
120:デフォルトの名無しさん
20/05/16 08:49:36.47 mgXvg9qv.net
あーミリ秒指定でマクロを止めたいってことか?
それでもまだわからん
121:デフォルトの名無しさん
20/05/16 09:59:53 Tk5Omr1n.net
せめてmsecオーダーと書けばわかりやすいのに
しかも100ミリとかじゃないか?数ミリは気づかないはず
GetInputStateとDoEventsでどうにかできんか
122:デフォルトの名無しさん
20/05/17 13:30:28 qdHuVgcd.net
>>110
マルチプロセスならできそうな気がしない?
知らんけど
123:デフォルトの名無しさん
20/05/17 13:48:57 LkRZ0WP+.net
[現象]
e
124:xcelの vbaエディタで、フォントの設定が出来なくなった。 ツール-オプション-エディタの設定を選択すると、excelが強制終了してしまう。 [環境] windows10 pro office personal 2019 [発生時の操作] エディタの設定を、MSpゴシックから、 Ricty Diminished(Ricty Diminished Discordだったかも) に変更した直後から発生するようになった。 http://blog.higty.xyz/post/vbe-setting-error/ https://www.moug.net/tech/exvba/0150130.html ここを見ましたが、レジストリキー:HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common が存在しません。 よろしくお願いします
125:デフォルトの名無しさん
20/05/17 14:05:50 dvSHUyYR.net
>>119
死ね
126:デフォルトの名無しさん
20/05/17 14:06:13 GAbG2JNM.net
>>119
ワークシートのページレイアウトからテーマは変更できる?
127:デフォルトの名無しさん
20/05/17 14:11:19 oJIHh9Jk.net
>>120
この馬鹿モンが
128:デフォルトの名無しさん
20/05/17 14:12:58 oJIHh9Jk.net
>>121
はいできますがそれでは解決しないのです
129:デフォルトの名無しさん
20/05/17 14:21:32 GAbG2JNM.net
>>123
まずレジストリのVBA\7.1\Commonが存在しないことが異常だから、Excelを再インストールするのが一番の早道な気がする
130:sage
20/05/17 14:31:40 LkRZ0WP+.net
>>121
123 は私の書き込みではないのですが、レイアウトを変更して何かファイルを保存すれば
レジストリキーが作成されるということかと思い試しましたが、作成されませんでした
>>124
やはりそれしかないですかね。
131:sage
20/05/17 14:34:16 LkRZ0WP+.net
>>125
×レイアウトを変更して
○テーマを変更して
132:デフォルトの名無しさん
20/05/17 15:10:42 IJ/C56sM.net
>>104
萩原をおぎわらって読んだりIndirectをインディレクトって言ってたから
そっ閉じしたわ。
133:デフォルトの名無しさん
20/05/17 16:08:33 Rv0pB+iF.net
インストロールと言ったら怒られたナリみたいなもんか。
134:デフォルトの名無しさん
20/05/17 16:57:48 lqCZHYYc.net
奇天烈大百科が巻物だったら、まさしくインストロールだぞ
135:デフォルトの名無しさん
20/05/17 17:38:29 Rv0pB+iF.net
奇天烈大百科が巻物だったら、まさしくインストロールだぞ
↓
If the eccentric encyclopedia is a scroll, it's just an installation.
↓
風変わりな百科事典が巻物なら、それは単なるインスタレーションです。
意味がさっぱり分からなかったので、Google翻訳かけてみたら、意味が分かるようになったぞ。
136:デフォルトの名無しさん
20/05/17 18:09:25 /J9Aoh2W.net
英語の方が簡単なんだよ
早くそれに気づけ
137:デフォルトの名無しさん
20/05/17 21:52:01 FPkLjraN.net
textboxの値チェックがうまく行きません。20~100までの範囲を入れたいのでchangeイベントで値がこの範囲か監視してます。
100を超えていたら100に、20を下回ると20になる様にリミッタを付けました。
すると100にした後にキーボード操作で30にしようとすると、0を消した時点で強制的に20になり、そこから何か押すと100になってしまいます。
どうすれば上手くいくのでしょうか。
138:デフォルトの名無しさん
20/05/17 22:01:56 GAbG2JNM.net
>>132
そういう時はスピンボタンを使った方がいいよ
139:デフォルトの名無しさん
20/05/17 22:08:25 dvSHUyYR.net
馬鹿はWindowsのUIもわからず自分勝手なインターフェースを作る法則
140:デフォルトの名無しさん
20/05/17 23:08:18.21 eOQVNdAF.net
>>132
Exitイベントを使う
141:デフォルトの名無しさん
20/05/17 23:21:22.78 vwApF1ba.net
大学で学ぶ物理を板書1枚にまとめてみた
URLリンク(www.youtube.com)
物理の研究分野を板書1枚にまとめてみた
URLリンク(www.youtube.com)
理学部と工学部の違いとは?
URLリンク(www.youtube.com)
大学と大学院の違い
URLリンク(www.youtube.com)
高校と大学の積分は決定的に違う?微分積分学の基本定理は実はすごい!
URLリンク(www.youtube.com)
数学にはどんな研究分野がある?数学の世界地図を一枚に描いて紹介してみた!
URLリンク(www.youtube.com)
142:デフォルトの名無しさん
20/05/17 23:30:26.45 oJIHh9Jk.net
>>136
ハゲとるやないかw
髪でうまくごまかしてるようだけど
143:デフォルトの名無しさん
20/05/17 23:46:16 FPkLjraN.net
>>135
ありがとうございます
コピペ対策以外は出来ました
144:デフォルトの名無しさん
20/05/18 20:11:09 W41e55Iy.net
ちょっと息抜きにセルや文字の色をVBAでやろうと思ったら大きく二通りあるんだね
カラープロパティとRGB関数
どっちで覚えるのが王道?
145:デフォルトの名無しさん
20/05/18 20:20:02 W41e55Iy.net
いや違うか
そんなに普段カラフルに使わないならカラーインデックス
細かく覚えて使いたいならカラープロパティかRGBってとこか
うーん前者かな
146:デフォルトの名無しさん
20/05/18 20:31:02.10 yqkonDmK.net
>>139
わかってない
ColorプロパティにRGB関数やインデックスの値を代入するんだよ
基本的には両方使わないと色が変えられない
147:デフォルトの名無しさん
20/05/18 20:37:00.50 W41e55Iy.net
>>141
なるほどぜんぜんわかってなかった
インデックス番号で数種類覚えちゃうか
RGB関数でいくつかの組み合わせ覚えちゃうか
何やろうにしても何種類かやり方があって初心者にきついわ
148:デフォルトの名無しさん
20/05/18 20:57:41 ZYPN6nu1.net
>>142
インデックス色はカラーパレットの位置に設定してある色だから環境によっては色が変わるよ
149:デフォルトの名無しさん
20/05/18 21:11:42.05 W41e55Iy.net
ほんと勉強になりますわ
最初は0と255の組み合わせだけでRGB関数で覚えちゃうようにしますわ
この8種類くらいしか多分使わないかな
150:デフォルトの名無しさん
20/05/18 22:21:45 MHLvuQaE.net
どういう時どれを使うのが適しているかで選ぶのであって、どっちで覚えるとかじゃない
151:デフォルトの名無しさん
20/05/18 22:29:22.00 1EfbZi6v.net
>>145
社内のマクロツールの中味たまに見るけどなんとなく、どっちかに統一してるって感じの人が多くない?
152:デフォルトの名無しさん
20/05/18 22:32:29.74 MHLvuQaE.net
どっちでもいいんであれば好きに統一すればいいんじゃね
153:デフォルトの名無しさん
20/05/18 22:39:17.66 W41e55Iy.net
たかが色だと思って使わないと思ってたけど
メッセージボックスで黄色い部分の数値を確認後、入力とかで
その範囲を真っ黄色にしてやって元に戻したり
他人、(おばちゃん)とかにはとにかくわかりやすく作るようにしてみることにした
154:デフォルトの名無しさん
20/05/19 05:32:55.42 MuDspthZ.net
rgb値の組み合わせを覚えるのは大変なのでWebColor名で覚えるといいかも。
rgbAliceBlue
rgbLightBlue
rgbBlue
rgbMidnightBlue
みたいな感じで記述すればrgb値を指定できる。よく使うやつだけ覚えとけばいい。
155:デフォルトの名無しさん
20/05/19 07:27:37.05 oLWOmWCd.net
vbRed 「・・・。」
vbGreen 「・・・。」
vbBlue 「・・・。」
156:デフォルトの名無しさん
20/05/19 07:31:04 FCPlMZOp.net
>「・・・。」
あーウゼー
157:デフォルトの名無しさん
20/05/19 08:30:30.69 D2gK0p2V.net
あーおれも、基本はそのvb~だ
グラデーション的な見栄えが必要の時とかは変えるけど
158:デフォルトの名無しさん
20/05/19 17:47:57 J9ZEMPxu.net
アクティブシートをコピーした後のコードがムズいなぁ
細かい所をいじる知識がなさすぎ
159:デフォルトの名無しさん
20/05/19 18:07:59 uEHEf6fZ.net
逆に原紙を作っておいて普段はそのコピーを使うようにするといい
160:デフォルトの名無しさん
20/05/19 18:17:23 J9ZEMPxu.net
>>154
ありがとう。そ
161:の方が都合そうしたよ。 シート名の取得も特定のセルから何とかできた。あとはブック名を指示したいんだけど調べりゃすぐ出てきそうだけどなかなか出て来ないわ エラー出ないように細かく作りたいもんだけ
162:デフォルトの名無しさん
20/05/19 19:19:11 qQEEjoZO.net
10万円給付の紐付けなんかVBAで余裕に出来るのに話題にならないのが不思議
163:デフォルトの名無しさん
20/05/19 19:48:13 NEFcECdd.net
>>156
こういう馬鹿が職場にいて余計混乱させているだけだろ
164:デフォルトの名無しさん
20/05/19 20:27:14.48 F1sOO54s.net
そのうち消えた10万円とかなるんじゃね
165:デフォルトの名無しさん
20/05/19 20:56:41 FccdSYLU.net
クルーズ船の消えた弁当
166:デフォルトの名無しさん
20/05/19 21:22:42.73 oItI0x3V.net
絶対にわからん関数ばかり使ってる理解不明なコードをネットからパクって少し弄ったら完全に業務で対応できてラッキー
そこから今日もユーザーフォーム適当に作ってメッセージボックスとインプットボックスを組んでいって
効率化したけど相変わらず上達せん毎日だわ
167:デフォルトの名無しさん
20/05/19 21:40:57 OdQysc5C.net
ここは日記帳ではない
168:デフォルトの名無しさん
20/05/19 22:33:25.66 flKz052u.net
>>156
1億2000万件のデータを、誤読無く、重複無く、生死の年月日まで
勘案して処理する自治体まで勘案してエクセルに食わせろとな?
169:デフォルトの名無しさん
20/05/19 23:58:06 dbsigt0d.net
相談させてください。
羅列されたデータにオートフィルタをかけて、その中でのランダム選択をシートを使わないでやる方法が知りたいです。
A列(1~6年)、B列(1~8組)、C列(名前)
みたいな感じで、AとBから複数選択後にCから選び出す感じです。
今までは作業用のシートを設けてオートフィルタをかけたものを別シートにコピーし、その中でrandomで選んでいました。
諸事情により作業用シートが作れないので、おそらく配列内だとは思うのですが・・・・
170:デフォルトの名無しさん
20/05/20 00:07:04 vp7gkhOL.net
>>163
VBAなら、とりあえず乱数を発生して、その行がオートフィルタかかってたらもう一度乱数からやり直せばいいだけ
171:デフォルトの名無しさん
20/05/20 01:09:15.99 0kv4kFzW.net
俺なら配列に入れてからやる
172:デフォルトの名無しさん
20/05/20 02:23:38.33 p47zFM4b.net
>>163
フィルタ掛けた結果をROWだけ配列に抜き出して、乱数で配列の中から一つ選べばいいんじゃね
173:163
20/05/20 06:43:20.78 98prku9b.net
>>166
早速ありがとうございます
そのままだとフィルターかけられたROWも選ばれません?
オートフィルターかけた配列を一旦コピーすればいいのでしょうか?
174:デフォルトの名無しさん
20/05/20 07:03:34.54 skRckF1R.net
ランダム選択が目的なら、そもそも、オートフィルターにこだわる必要あるのかな?
VBA使うなら、オートフィルターを扱うのは微妙に面倒だから、自前でフィルターすればいいと思うぞ
175:デフォルトの名無しさん
20/05/20 08:27:34.61 DAK+DifG.net
オートフィルタやオートフィルタ的コードは使わない
VBAのみで
乱数生成は一度きり
3桁の乱数 a を生成する
まず a を6で割って余りが0~5まででるんで
0が出たら6年
1が出たら1年
2が出たら2年
3が出たら3年
4が出たら4年
5が出たら5年
とする
例えばここで2が出て2年が選択されたら
さっきの乱数 a をまた使って、組数で割って余りを求める
んで同じようにして
今度は選択された組の人数で割って個人に割り当てられた番号でを特定する
これを繰り返して複数人を選んでいく
選ぶ過程で同じ学年はダメとかあるなら
上の例で言えば一旦2が出たら次は2
176:を排除するとか 繰り返し文の中で if 使って条件つけていく 学年の数、組の数、クラス人数は予めシートに表にしておくこと とかとか
177:デフォルトの名無しさん
20/05/20 08:28:13.58 DAK+DifG.net
一度きりってのは1人選ぶのに一度ってことでしゅ
178:デフォルトの名無しさん
20/05/20 08:30:51.03 DAK+DifG.net
6学年あって6組の学年があったりするとだめか
階層が下がるごとに乱数生成してもいいのかね
179:デフォルトの名無しさん
20/05/20 09:26:22 CH9LsvxQ.net
何年何組は決めておいてから誰にするかを乱数?
180:デフォルトの名無しさん
20/05/20 09:45:48.33 B3VzH1xh.net
A1からオートフィルターをかけて
もし、変数aが空欄でなければ、B列で変数aと同じ値だけにしぼる
もし、変数bが空欄でなければ、C列で変数bと同じ値だけにしぼる
もし、変数cが空欄でなければ、D列で変数cと同じ値だけにしぼる
というような書き方をおしえてください
181:デフォルトの名無しさん
20/05/20 11:11:47 nPhD6zxk.net
>>163
Dim r As Range
Dim n As Long
Dim i As Long
With Range("A1").CurrentRegion
With .Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
n = 0
For Each r In .Rows
n = n + 1
Next
if n = 0 then
exit sub
end if
n = 1以上n以下の乱数
i = 1
For Each r In .Rows
If i = n Then
rを使ってなにかする
Exit Sub
End If
i = i + 1
Next
End With
End With
182:デフォルトの名無しさん
20/05/20 11:23:14.33 qcti6JCq.net
>>173
まず意味が不明 →「変数aが空欄」
よくわかんないけど、
特定の表について、
VBA上で宣言した変数ごとに対応した列をフィルタする簡単なものなら書いてみた。
「空欄」の意味が不明なので、NULLか空文字か、それともセルのことだったのか、
そういうことも質問時に気にするように。
URLリンク(i.imgur.com)
183:173
20/05/20 12:02:23.38 B3VzH1xh.net
>>175
ありがとうございますm(_ _)m
184:デフォルトの名無しさん
20/05/20 15:56:33 a9xbkMkn.net
余談だがグループの中から1人をランダムで選ぶ場合、
同じことを繰り返すと同じ人が選ばれる可能性がでてくる
それを無くしたい場合はシャッフルしてから順番に選ぶといい
185:デフォルトの名無しさん
20/05/20 17:56:09 IoSOKpcA.net
何かをさせるときに一度リセットする的なアレですね。
プロージャくっつけて作ってる初心者だが何となくその感覚
スマホとPCのデータが両方消えて
前スレで乱数の発生教えてくれた人のコードが見れなくなったが、やべえ
186:デフォルトの名無しさん
20/05/20 18:10:15.58 bnGR2vkC.net
いや選ばれる人の立場になると、
俺前回やったのにまた俺?他の選ばれてない人はズルくね?みたいな
187:デフォルトの名無しさん
20/05/20 22:38:53 cJtMR3HM.net
前スレの教えてくれた恩人のコードやっと見つけたあああああ
Sub 乱数発生させる()
For 項目 = 1 To 6 '項目数を変更
列 = 項目 + 2
最小 = WorksheetFunction.Min(Cells(6, 列).Resize(30))
最大 = WorksheetFunction.Max(Cells(6, 列).Resize(30))
幅 = 最大 - 最小
For サンプル = 1 To 25 'サンプル数
行 = サンプル + 5
If Cells(行, 列) = "" Then
Cells(行, 列).NumberFormatLocal = "0.000"
Cells(行, 列) = Rnd() * 幅 + 最小
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
End If
Next
Next
End Sub
これがC6がサンプル1の項目1が始まりになるシートで使えてるんだけど
これをC12からとかに変えるにはどこ弄ればいいですか?
誰かコメントをこれに添えてもらえませんか…
前スレの大恩人に救われたコードを更に流用したいです
188:デフォルトの名無しさん
20/05/20 23:01:
189:11 ID:cJtMR3HM.net
190:デフォルトの名無しさん
20/05/20 23:30:59 c0Xo7Xk6.net
自分で考えることもしない厚かましい馬鹿は消えろ
191:デフォルトの名無しさん
20/05/20 23:45:16 cJtMR3HM.net
Sub 乱数発生させる()
For 項目 = 1 To 20 '項目数を変更
列 = 項目 +
最小 = WorksheetFunction.Min(Cells(12, 列).Resize(36))
最大 = WorksheetFunction.Max(Cells(12, 列).Resize(36))
幅 = 最大 - 最小
For サンプル = 1 To 25 'サンプル数
行 = サンプル + 11
If Cells(行, 列) = "" Then
Cells(行, 列).NumberFormatLocal = "0.000"
Cells(行, 列) = Rnd() * 幅 + 最小
Cells(行, 列) = Round(Rnd() * 幅 + 最小, 3)
End If
Next
Next
End Sub
考えたけどこれかなぁ
他ののまっさらなシートだと乱数再現できた
けど反映させたいシートだと乱数が狂う
配置も数値も同じなのに
シートの設定かぁ
192:デフォルトの名無しさん
20/05/20 23:49:11 Khp9j2eL.net
数千行~数万行のデータが格納されてるシートで、
ある特定の範囲で最大文字数を取得するには
配列関数で{Max(Len(A1:A10))}とすれば良いですが(VBA上でEvaluateを用いて実装してます)、その最大文字数があるセルの場所(行番号)を特定する方法はありますか?
最大文字数のセルが複数ある場合はその全てのセルの行番号を取得したいです
最終的に、範囲内の最大文字数のセルの背景色を変えたいのが目的です
193:デフォルトの名無しさん
20/05/21 00:19:06 OWznaKXu.net
>>184
セルの文字数がその最大文字数と同じなら色変えるっていう条件付き書式を設定する
194:デフォルトの名無しさん
20/05/21 00:48:50 V79mjqtT.net
>>185
条件付き書式とは盲点でした。
トライしてみます。ありがとう!
195:デフォルトの名無しさん
20/05/21 01:01:13.95 eV6pHfb6.net
わかった。
けどもう後には引けんほど次元の高い事やらせてて手に負えないわ
196:デフォルトの名無しさん
20/05/21 03:10:09.62 u8xoMicA.net
気づくの遅すぎ
197:デフォルトの名無しさん
20/05/21 06:58:06 Qgph+4Ei.net
フォームのラベルに計算結果を表示について。
結果がプラスならそのまま、マイナスなら赤字にマイナス記号を付けるにはどうしたらいいですか?
例
350
-350←赤字
198:デフォルトの名無しさん
20/05/21 07:11:40.31 uDeLtUtB.net
>>183
セル範囲の内容で乱数の範囲が設定されているからデータが入力されていないと乱数にならないのに、
そこにデータが入力されていると値が更新されない
なかなかのジレンマだね
余談だけど、直感的にわかりにくいから、ループカウンタは列と行そのものにした方がいいと思うぞ
あと、項目数と基準セルを変えたいなら、それを変数にして、こんな感じ
項目数 = 20
サンプル数 = 25
行0 = Range("C12").Row
列0 = Range("C12").Column
For 列 = 列0 To 列0 + 項目数 - 1
...以降も上記変数で置き換える
199:デフォルトの名無しさん
20/05/21 08:07:12 Sgq4UdRX.net
>>190
ありがとう、全部のコード貰った後に少しずついじる事しかできないレベルだからまた挑戦してみるわ
コメントしっかり残して勉強するべしですな
200:デフォルトの名無しさん
20/05/21 12:39:59 VB42BHka.net
>>190
それとこのコード見てさらっとそうやって理解できるってやっぱすごいね
仰るとおり今記入してある数値はそのまま
で残りその数値を元に乱数で埋めるというのを
前スレの人が教えてくれた
みんな凄いの一言
201:デフォルトの名無しさん
20/05/21 12:46:28 /CAIZx5s.net
日本語よりはるかに簡単
202:デフォルトの名無しさん
20/05/21 18:17:58 uS9Lfycl.net
パワークエリでデータモデルに読み込んだ後ファイル移動等して元ファイルを参照できない状態からデータをシートに書き出したいのですがvbaで出来ますか?
手動では既存の接続からテーブルとして書き出せるのですがマクロ化するとクエリの更新処理でパスが見つかりませんというエラーになります
203:デフォルトの名無しさん
20/05/21 20:15:46.18 2OHs6iV3.net
>>189
その文章そのまんま単純に処理に起こすだけでいけるだろ�
204:、
205:デフォルトの名無しさん
20/05/21 20:23:35 L96ERFQO.net
>>194
読込時にテーブルデータを別シートにコピーするようにしとけば?
206:デフォルトの名無しさん
20/05/21 21:28:40.44 1bkcSVS7.net
>>194
Excel.Currentworkbookで、テーブルの値をパスとして読み込むようにしておいて、ファイル移動したらVBAでそのテーブルの値を書き換えるようにする
207:デフォルトの名無しさん
20/05/21 22:27:29 eV6pHfb6.net
銀行まるめ型だっけ
仕事で四捨五入多用する俺はあの機能がうざすぎる
Format関数使ってるけど素直にRound関数はエクセルと同じ機能にしろよマジで
208:デフォルトの名無しさん
20/05/21 23:25:30 uS9Lfycl.net
>>196
容量がでかいのでどうしても必要なときだけシートに書き出す形にしたいんです
>>197
元ファイルは自分のローカルにあって共有フォルダで別の人が使う想定なので
209:デフォルトの名無しさん
20/05/21 23:51:59.74 g1Bqd7P3.net
ある何かをやりたいときに骨子になるコードが完成するともうそこから手直しが楽しくて止まらないわ
210:デフォルトの名無しさん
20/05/22 00:18:17 TbAUFCKp.net
プロパティと引数の使い分けがいまいちわからん
クラス内の一つのプロシージャで利用する変数なら引数で渡してよいの?
211:デフォルトの名無しさん
20/05/22 03:00:05 qVNfs0Gr.net
動けばいいんじゃね
212:デフォルトの名無しさん
20/05/22 04:52:54.15 HmQhS1LZ.net
プロパティ
とりあえず1個ずつセットしといて、処理の開始は後回しにできる
順番を意識しなくていい
引数
複数の変数を参照渡ししたい時、構造体やサブプロパティは微妙にめんどくさい
セット忘れが防げそう(願望
213:デフォルトの名無しさん
20/05/22 06:38:47 mpVA2e0J.net
>>201
一応定義としては、プロパティはオブジェクトの設定や状態を見たり書いたりするものという事になってる
一度設定したら変えることが殆どない設定はプロパティ、
ちょくちょく変える設定は引数、
みたいな感じでいいと思う
214:デフォルトの名無しさん
20/05/22 07:33:08.57 TbAUFCKp.net
>>203>>204
ありがとう
厳密に使い分けは難しそう
動くけど、他人が読んだら混乱するんだろうなと思いながら書いてる
215:デフォルトの名無しさん
20/05/22 11:06:37 y/Lzet5S.net
>>205
色々作ってるとそのうちなんとなくどっちにした方がいいかわかってくると思うよ
216:デフォルトの名無しさん
20/05/22 13:23:07 DQGXczns.net
変数ってみんなどんな付け方してんの
My~とかそういう変数付けたりしてるサイトもあれば色々だね
217:デフォルトの名無しさん
20/05/22 13:55:43 uqJ26gv2.net
日本語で
「わたしの~」とかそういう変数名を付けたりしてる。
218:デフォルトの名無しさん
20/05/22 18:08:02 FMkBDb3b.net
拙者も
219:デフォルトの名無しさん
20/05/22 18:16:23 CsJitSv2.net
我(われ)
某(それがし)
拙(せつ)
朕(ちん)
220:デフォルトの名無しさん
20/05/22 21:51:59 Cbv5LLjj.net
セルの数式中で条件成立時のみHYPERLINK関数を生成してるのですが、
?HYPERLINK関数が生成された事を確認
?リンク切れが無いか確認
する事は可能でしょうか?
イメージは下記ですが、数式は複数のパターンがあり困っています
=if (A1<>"", HYPERLINK(A1&B1,B1),B1)
221:デフォルトの名無しさん
20/05/22 23:34:25.54 xc22QBUa.net
未だに二つのセルの掛け算を電卓で計算してて手入力する50歳のおじさんがいる職場なんだよな
222:デフォルトの名無しさん
20/05/23 01:03:15 pi9ABoQN.net
?HYPERLINK関数が生成された事を確認 -> 隣のセルに If (xxx, 1, 0) とかやっとけばいいんじゃないの
?リンク切れが無いか確認 -> マクロでHTTPリクエストしてステータスコード見ないと駄目だろうね
223:デフォルトの名無しさん
20/05/23 04:02:16 TU97qQFp.net
>>205
プロパティは根幹部分を触らせるメンテ用メソッド的な意味合いで用
224:意するといいよ。 例えば「何かを〇倍にする」というメソッドを持つクラスがあったとして、 この「何か」部分が引数で、「〇倍」部分がプロパティ。 利用者はプロパティで「〇倍」を「二倍」等に変えて異なる機能を持つインスタンスを作る事が出来る。 もちろん予め二倍や三倍に設定済みのクラスを作ってもいいんだけど、 プロパティで変更出来るようにすれば一つのクラスで済むという利点がある。 インスタンス化してプロパティを変えたオブジェクトを返す関数(コンストラクタ関数)を作れば凄く便利だよ
225:デフォルトの名無しさん
20/05/23 04:04:50 TU97qQFp.net
インスタンス化は new クラス名 でオブジェクトを作ることで、
インスタンスはその作成したオブジェクトのことね
226:デフォルトの名無しさん
20/05/23 17:42:06 x2nf7i64.net
ExcelVBAでCSVファイルを2次元配列に格納しようと思い、そこまで作成はできました。
ここを参照しました:URLリンク(ateitexe.com)
その配列に格納した後、特定の文字列がある行を削除しようと思うと、配列だとかなり手間だと感じました。
(文字列を検索、行を削除、詰める作業が必要)
だったら、そもそも配列に入れる前にそのcsvの行を無視しようと思うのですが、どうしてもうまくいきません。
どうしたらいいのでしょうか?
227:デフォルトの名無しさん
20/05/23 17:46:18 105ldQbQ.net
文字列を検索、行を削除、詰める作業をお勧めします
228:デフォルトの名無しさん
20/05/23 18:20:37 RvKaLrIF.net
>>216
馬鹿過ぎて話しにならない
少しは学んでから出直せ
229:デフォルトの名無しさん
20/05/23 18:40:31.27 0VGwJWuY.net
>>216
if(文字列.含んでるよ("RegExp") )then
continue;
で済む(VBAにはcontinue無いけど概念的には)処理を
「どうしてもうまくいきません」と言ってるわけ?
230:デフォルトの名無しさん
20/05/23 18:49:52.27 J+1ULzMv.net
特定の文字列がある行は空にすればええやん
それとも別に空の行も含まれてるんか
231:デフォルトの名無しさん
20/05/23 19:27:43 n1v+MUu8.net
>>216
そのどうしてもうまくいかない部分を書けよ…
232:デフォルトの名無しさん
20/05/23 19:33:17 P5e4K719.net
例えば、Ruby で、入力ファイルが、
あ,いう
a,bc
1,23
require 'csv'
ary = [ ]
CSV.foreach( "input.csv" ) do |row| # 1行ずつ処理する
next if row[ 1 ] == "bc" # skip
ary.push row # 追加
end
p ary #=> [["あ", "いう"], ["1", "23"]]
233:デフォルトの名無しさん
20/05/23 20:02:14.42 FaM1nYaB.net
要素数を変えるような操作を配列にする場合、
VBAだと大抵は新しい配列を作るような処理にしたほうが楽
foreachで条件にあえば追加する、そんな感じ
234:デフォルトの名無しさん
20/05/23 20:16:37 +RVUJGzG.net
配列に入れる前にそのcsvの行を無視しようという発想は正しいと思うぞ
Splitする前に文字列判定して、無かったときのみ n=n+1 まで実行するようにすればいけるはずだよ
それと、ary(n, i) = tmp(i) のところは要注意
csvの列数がRedimの行で設定した数分を越えると、配列の範囲外エラーが起きるので
235:デフォルトの名無しさん
20/05/23 21:48:22 GhgCxwTJ.net
B列の2行目から最終行に「2020/5/23」のような文字列が入力されているので
この文字列を「2020/5/23」に変換するコードを教えてください
236:デフォルトの名無しさん
20/05/23 22:07:45 DEt0hEL0.net
>>225
Sub Sample1()
End Sub
237:デフォルトの名無しさん
20/05/23 22:09:12 YkB5QRvg.net
>>226
ありがとうございます!
238:225
20/05/23 22:38:35 GhgCxwTJ.net
>>226
>>227
すみません。「文字列を日付型」に変換でしたm(__)m
239:デフォルトの名無しさん
20/05/23 23:15:23 RvKaLrIF.net
>>228
馬鹿は死ねよ
どうしてこう次から次へと馬鹿が来るんだ?
240:デフォルトの名無しさん
20/05/23 23:49:07 DwihZV3Z.net
例
数値 1500
期間 2020/05/21~2023/02/12
この期間のセル数に数値1500の値を 均等割で入れる場合のセル数の計算方法がわかりません。
※用意してるセルの期間
2020年1月から2022年12月まで。
※ひと月3分割で1年36マス。
上旬1~10 中旬11~20 下旬21~末
※2022年を超えた場合はそこまでの均等割を入れそれ以降は入れない。
※開始期間が2020年1月以前の場合は1月からの均等割を割り振る。
こんな感じの事をしたいんですけど、期間の計算方法の伝授願います。
241:デフォルトの名無しさん
20/05/23 23:51:24.02 GhgCxwTJ.net
>>225
Sub Test()
Dim cnt As Long
Dim da As Date
For cnt = 2 To Cells(Rows.Count, 2).End(xlUp).Row
da = CDate(Cells(cnt, 2))
Range("B" & cnt) = da
Next cnt
End Sub
242:デフォルトの名無しさん
20/05/24 00:33:29.03 jgkofs6w.net
>>230
VBA関係ないただの算数ないか
243:デフォルトの名無しさん
20/05/24 05:46:51.68 kGXS6p+T.net
>>229
君がつけ上がってる限り現れるね
244:デフォルトの名無しさん
20/05/24 06:12:40 VMYRmKv4.net
謙虚にしてたらもっとひどかった
245:デフォルトの名無しさん
20/05/24 06:15:08 A7TYPIWJ.net
Ruby の、clamp みたいな関数だろ
clamp(min, max) -> object
self を範囲内に収めます。
self <=> min が負数を返したときは min を、 self <=> max が正数を返したときは max を、
それ以外の場合は self を返します
1.clamp(0, 100) #=> 1
101.clamp(0, 100) #=> 100
-1.clamp(0, 100) #=> 0
246:デフォルトの名無しさん
20/05/24 09:33:40 ozGH/zB/.net
やたらrubyで表したがるやつなんなの?
無意味だし完全にスレチなんだけど
247:デフォルトの名無しさん
20/05/24 09:52:14 tKHuSqSe.net
それこのスレの透明人間
248:デフォルトの名無しさん
20/05/24 09:56:21 Aun0kaOs.net
「おれRuby知ってるんだ(どやぁ)」
じゃね?
249:デフォルトの名無しさん
20/05/24 11:44:26 0I4G4YZw.net
>>238
え?たかだか一つ言語知ってるだけでどや顔なんて…ありえるかもな。
250:デフォルトの名無しさん
20/05/24 15:25:32 ZTIdhNvp.net
>>230
説明がよくわからない。
サンプルを用意するなど、読み手にわかりやすい工夫をすること。
(期間が複数あってよくわからん、期間の基準が上中下旬なのか2023/2/12みたいな細かい日付もあるのか、
「この期間のセル数に」とか、36「マス」とか。
自分で作ったような言葉を、相手はまず理解できないと思うこと。)
最大限理解しようとして作ってみた。
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
251:デフォルトの名無しさん
20/05/24 17:31:52 aHD8sbyt.net
>>230
ひと月を3分割って、微妙に面倒だったりするね
質問は期間の求め方なので、こんな感じでいいと思う
簡単な流れは、月の差-1を出して*3し、開始と終了の日-1を10で割って半端な分を補正する感じ
計算上、初回分も算入する必要がある事に注意(例えば、 5/24 ~ 5/24 の場合、単純に引くと0 になるから+1する必要がある)
あと、月の上中下旬単位でのみ考える(2/12 は2/20と同等に扱う)
Function kikan(date1 As Date, date2 As Date) As Integer
Dim res As Integer
res = DateDiff("m", date1, date2) - 1 'VBAでは単純な月の差なのでDay(開始日)>Day(終了日) となる場合を気にしなくていい
If res < 0 Then '同じ月
252:res = min2((Day(date2) - 1) \ 10, 2) + 1 res = res - min2((Day(date1) - 1) \ 10, 2) Else res = res * 3 res = res + 3 - min2((Day(date1) - 1) \ 10, 2) res = res + 1 + min2((Day(date2) - 1) \ 10, 2) End If kikan = res End Function Function min2(a, b) : min2 = IIf(a < b, a, b) : End Function あと、各(月3分割)の均等割を出すとき、単純に等分した数値を次々加算していくと誤差が出る可能性があるので、その都度かけ算で計算しなおした方がいいよ
253:デフォルトの名無しさん
20/05/24 18:45:45 X8IGI7Pl.net
均等ではなくなることが分かっているのに均等割というのは一体
均等ではないなら分割の明確なルールと呈示するのが先だろうに
254:デフォルトの名無しさん
20/05/24 20:23:46.09 Ij6CWItZ.net
select case iDay
case 1 to 10
’上旬
case 11 to 20
’中旬
case else
'下旬
end select
こんなんでいいんじゃねーの
255:デフォルトの名無しさん
20/05/24 20:26:51.14 WNKMZrc1.net
理解ができるのがすげぇよ
俺には文章から何がしたいのか分からん
256:デフォルトの名無しさん
20/05/24 20:35:05 CLZ8mfOM.net
me,too
257:デフォルトの名無しさん
20/05/24 20:45:14 i+YVCLEB.net
セルに値を手動入力中にVBAから別のセルにアクセスがあるとエラー落ちするんだけど、非同期に処理する方法はないんかね。
VBA側はインターバルタイマーでデータ処理させてて、一方でユーザーはメモ入れたり諸作業したいんだ。
258:デフォルトの名無しさん
20/05/24 20:46:27 8AgUd6nh.net
vb全然知らないんだけどサクッと教えてほしい
Range("C2").AutoFill Destination:=Range("C2:C804"), Type:=xlFillDefault
というオートフィル用をするコードがあるとする。
このコードの804部分はいつでも固定値だからセル内の数字を参照するような可変にしたい
一応このコードの前に
Volume = Range("J5").Value
として数字があるセルから数値をVolumeに得てるんだけど
このVolumeを804の部分に当てはめたい
どうしたらいい?
259:デフォルトの名無しさん
20/05/24 21:22:14.11 xjag2nx7.net
>>247
馬鹿は死ねよ
260:デフォルトの名無しさん
20/05/24 21:26:46.69 YjTDgAdj.net
>>247
" "は文字列を表す
261:デフォルトの名無しさん
20/05/24 21:29:42.85 IJT9Ws79.net
>>247
C2からvolume個の連続データ(volumeは可変)を作りたいんだとしたら
.AutoFill Destination:=.Resize(volume)
とかどうやろね
262:デフォルトの名無しさん
20/05/24 21:35:15.28 IJT9Ws79.net
>>246
セマフォ(いわゆる排他処理)をエクセルでやるのか
実現するのは結構テクニカルになるね
仮にAccessが使えるなら使ったほうがすっきりするかと
263:デフォルトの名無しさん
20/05/24 21:50:08.32 8AgUd6nh.net
>>250
C2から始める場合はどうしたらいい?
264:デフォルトの名無しさん
20/05/24 22:01:27.85 IJT9Ws79.net
volume = Range("j5")
With Range("c10")
.AutoFill Destination:=.Resize(volume)
これでだめ?
265:デフォルトの名無しさん
20/05/24 22:42:24 Ij6CWItZ.net
Volume = Range("J5").Value
Range("C2").AutoFill Destination:=Range("C2:C" & cCtr(Volume)), Type:=xlFillDefault
こういうことじゃね
266:デフォルトの名無しさん
20/05/24 22:43:40 Ij6CWItZ.net
× cCtr
〇 cStr
267:デフォルトの名無しさん
20/05/24 23:13:25.93 FPjhV5Sl.net
>>246
VBAでブックへの書き込みがないなら、外部から読み取り専用で開いてデータだけ頂いて処理する方法がある
例えばVBScriptならVBAからソースをコピペできる部分も多い
後はChangeイベントで変更が行われた時に、バックエンドとデータを同期する。
処理自体はバックエンドが行う。
サーバーは空いてるPCに(VBA�
268:ナ実行したければ)Excelをインストールして使えばいい。
269:デフォルトの名無しさん
20/05/25 03:36:22.58 fpmiA/eB.net
セルに手入力してるんだから保存するんじゃね
270:デフォルトの名無しさん
20/05/25 07:55:53 2rkq/dFE.net
>>240
遅くなり申し訳ないです。説明が下手すみません。後でゆっくり読んで理解してみます。
271:デフォルトの名無しさん
20/05/25 07:58:34 2rkq/dFE.net
>>241
知らないコードあるので調べて見ます。
272:デフォルトの名無しさん
20/05/25 13:23:07 arQu/7J9.net
セルの入力規則の選択項目をコンボボックスのListindexみたいに番号抽出って出来ないんでしょうか
273:デフォルトの名無しさん
20/05/25 15:12:23 TkkoIJYG.net
できる
274:デフォルトの名無しさん
20/05/25 15:21:07 TNrQR7ea.net
"セルの入力規則の選択項目"と言っているのは、
データの入力規則ウインドウ-設定タブ-条件の設定について、
入力値の種類を"リスト"にしたときの"元の値"に入力した各値のこと?
あとわざわざ番号で抽出する意味は?
この"元の値"をVBAでセル(range)のプロパティから取得すると、だいたい下のどちらかのパターンのStringとなる。
1 "元の値"に入れたそのままのリスト用文字列(「a,b,c」など)
2 "元の値"に入れた参照セル範囲(「=$A$1:$A$5」など)
「番号抽出」とかいう言葉がよく分からんけど、上記で
1なら文字列を配列にするなどで解析して、セルの値(Value)で取得する
2なら参照先を取得して配列にするなどする
とかで"元の値"を利用できるはず
わざわざIndexを取りたいならその配列なりから取ればいい
目的がおかしくなってる可能性がある
275:デフォルトの名無しさん
20/05/25 16:03:17 WdAmw2Xs.net
>>260
Function validFormula(c as Range) '選択セルの入力規則式を取得(簡易版)
validFormula = Evaluate(c.Validation.Formula1)
End Function
というユーザー定義関数を用意して
=MATCH(A1,validFormula(A1),FALSE)
の様な感じ
276:デフォルトの名無しさん
20/05/25 16:41:06 arQu/7J9.net
>>262
説明が下手ですいません
やりたい事は以下のとおりです。
?表示する場合
・機器と通信して、通信データ読み出すとIndex(数値)が取得できる。(変更不可)
・取得値が1の場合、選択リスト要素が"aa,bb,cc,dd"とするとセルにはaaが選択される。
?取得する場合
・セルの選択リストの選択要素が"dd"だった場合、4を返すとなる
・Index=4を通信で送る
コンボボックスだと楽に出来るのですが、セルを使った場合の対処に困っています。大量に項目があるのでコンボボックス一つずつ作成は対応できなくて。
277:デフォルトの名無しさん
20/05/25 18:18:30 pvRy3Vo6.net
PDF出力をするときに、ファイル名をBK19にして、同じフォルダ内の、
"納品書"というフォルダ内に保存したいのですが、保存場所が同じフォルダの同じ階層になってしまいます。
"納品書"フォルダに保存する方法をお願いします
Dim PATH_ As String 'このブックと同じフォルダの"納品書"フォルダ
~途中省略
PATH_ = ThisWorkbook.Path & "\" & 納品書
~途中省略
sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PATH_ & Range("BK19"), OpenAfterPublish:=False
それと、ネット上のサンプルの中に、For文のNextの後の変数が書いていないものがありますが、どういう時に書かなくていいんですか
278:260
20/05/25 18:21:44 arQu/7J9.net
出来ました。
279:デフォルトの名無しさん
20/05/25 19:12:11.07 kYm8Dr+5.net
> PATH_ = ThisWorkbook.Path & "\" & 納品書
PATH_ = ThisWorkbook.Path & "\納品書"
280:デフォルトの名無しさん
20/05/25 19:17:16.20 0mNo0xGU.net
すみませんエクセルですが教えてください
セルに2020/5/25と入っている。
2020/5/25(月)というテキストにしたい。
281:265
20/05/25 19:27:24.37 pvRy3Vo6.net
>>267
試しましたが、納品書フォルダには保存されず、同じ階層に保存されてしまいます。
282:デフォルトの名無しさん
20/05/25 19:32:32.8
283:0 ID:RZDTWD0g.net
284:デフォルトの名無しさん
20/05/25 19:37:30.13 voBvEsJz.net
ごめ
PATH_ = ThisWorkbook.Path & "\納品書\"
これは?
285:265
20/05/25 19:45:38 pvRy3Vo6.net
>>271
ありがとうございます。納品書フォルダに入るようになりました。
286:デフォルトの名無しさん
20/05/25 20:09:54 0mNo0xGU.net
>>270
さらに、テキスト化は
できますか?
287:デフォルトの名無しさん
20/05/25 20:55:09 +lR6vdzO.net
>>273
text関数
288:デフォルトの名無しさん
20/05/25 21:16:44 Xi2PhkBU.net
>>273
死ね
289:デフォルトの名無しさん
20/05/25 21:40:54 oBwL7wIu.net
>>275
この馬鹿モンが!
290:デフォルトの名無しさん
20/05/25 22:09:44 5DLeDpsM.net
dim sine as object
291:デフォルトの名無しさん
20/05/25 22:59:11 SN+Wx3Rt.net
Set sine = Nothing
292:デフォルトの名無しさん
20/05/25 23:18:40.90 jPur8MoZ.net
テンプレから複数作ってく場合テンプレの右にどんどんコピーしていって
あとでテンプレシート以外を新しいブックに保存
これだとなぁ、おばちゃんがややこしいと文句言うかも
悩むなぁ
293:デフォルトの名無しさん
20/05/26 10:12:12.68 TGtSSAvG.net
ややこしや
294:デフォルトの名無しさん
20/05/26 12:54:30.53 aCjjmYBU.net
所属してる部署や業務によってやりたい処理が違うから全部まんべんなく覚えていきたいという無駄な欲を捨てんといかんなぁ
はぁぁ大学行かずに専門とかで情シス専攻すればよかった
295:デフォルトの名無しさん
20/05/26 15:22:17 QaHLpt3K.net
アホはしね
296:デフォルトの名無しさん
20/05/26 15:33:26 aCjjmYBU.net
毎回それ言うためだけに見に来てるんなら
見なきゃいいのに
297:デフォルトの名無しさん
20/05/26 17:01:22 xe35/PQB.net
IT畑の人間は既存の業務フローを神聖不可侵な絶対的公理と考えてそれを自動化しようという発想をしがちだけど、それは注意が必要だと思うわ
自動化以前にそもそも無駄な業務って沢山ある
特にVBAで安易に自動化したくなるような業務はその傾向が強くて、現場の人間とちゃんと話せばあっさり消滅したりするもんだ
298:デフォルトの名無しさん
20/05/26 17:18:49.31 2eoVc4aq.net
客の業務自体の改善に付き合うなんていうめんどくさい事はしないよ
299:デフォルトの名無しさん
20/05/26 18:59:45.92 LKm82hyE.net
客じゃなくて自分の会社なんだろ
300:デフォルトの名無しさん
20/05/26 19:26:44.98 VDow7UZ6.net
これはおかしくね?と思っても依頼されたように作るしかない
301:デフォルトの名無しさん
20/05/26 19:38:37 4UYpyuwL.net
ああ、上司の命令ならな。
反論しろって?
10個の工程をPGが3工程くらいに短縮すると、理解できなかったりするんだよな。
302:デフォルトの名無しさん
20/05/26 19:50:36.19 e8iGmvo7.net
そりゃおまいさんが問題の分離ができてないのでは
303:デフォルトの名無しさん
20/05/26 19:52:38.59 MDEhHweB.net
自社の業務改善って自分もしくは管理下の範疇でしかしないわな
責任取れる範囲でやらないと痛い目みるし、ドキュメントだ体制だルールだなんだ面倒だしな
基本周りは全部敵だよ
304:デフォルトの名無しさん
20/05/26 20:18:36 l4mmL3sO.net
そういう組織は長生きしないだろうな
305:デフォルトの名無しさん
20/05/26 20:25:34 EtaD8bXQ.net
>>230
Ruby で作ってみたけど、めちゃめちゃ複雑な仕様だった!
2020/05/21 ~ 2023/02/12
を以下の、3つの期間に分けて、[0, 94, 5] となった!
~2019/12/31
2020/1/1~2022/12/31
2023/1/1~
306:292
20/05/26 20:30:27.90 EtaD8bXQ.net
10日ごとの期間の数が、[0, 94, 5]
307:デフォルトの名無しさん
20/05/26 20:41:03.58 I81g2H63.net
所定のフォルダの中に「AAA.xl�
308:唐�」という名前のエクセルファイルがあった場合、そのファイルを削除し、 その後同一フォルダ内のエクセルファイルを「AAA.xlsx」というファイル名に変更する、という処理を しています。マクロ作成当初は問題なく処理できていたのですが、数日前からファイルを削除した後 実際にはエクセルファイルがあるにもかかわらず「エラー53 ファイルが見つかりません」とエラーが でるようになりました。終了ボタンを押してエラーウィンドウを閉じた後、同じ処理をすると今度は エラーが出ずに処理できます。 コード自体は変更していないのですが、このように実際には該当するファイルがあるにもかかわらず、 1度目(ファイル削除後ファイル名変更。ファイル削除処理は正常終了)はファイルが見つからずエラー、 2度目(削除するファイルがない状態でファイル名変更)は正常に処理が終了、となってしまう原因で なにか思い当たるものがある人いますか? 具体的には AAA.xlsx 20200526.xlsx ↓(AAA.xlsxを削除)←1回目はこの処理の後エラー53 20200526.xlsx ↓(ファイル名変更) AAA.xlsx となり、2回目は 20200526.xlsx ↓ AAA.xlsx で正常に処理ができます。 ファイル名変更は Name "*.xlsx" as "AAA.xlsx" で処理しています
309:デフォルトの名無しさん
20/05/26 20:46:55.97 VDow7UZ6.net
>>294
エラーが出るコードを見なきゃわからん
310:デフォルトの名無しさん
20/05/26 21:22:32.89 EtaD8bXQ.net
>Name "*.xlsx" as "AAA.xlsx"
何となく、この、* がヤバそうw
311:デフォルトの名無しさん
20/05/26 21:32:47.20 PZVl0MiE.net
プロパティのセットで配列や複数の引数を渡したいんだけど、送り手側の構文エラーにしかならない
調べても見つからないんだけど普通やらないの?
Variantで宣言しておけば通るっぽいけど
312:デフォルトの名無しさん
20/05/26 22:38:28 3xGTmG1z.net
Sub テキストをエクセル() 'txtをエクセル化
With CreateObject("wscript.shell")
.currentdirectory = "C:\"
End With
Application.Dialogs(xlDialogOpen).Show "*txt.*"
End Sub
色々調べて作ってみたんですが
テキストファイルウィザードのウィンドウが出て完了を押す という手間が残りやす…
この手間をスキップというか直接Excelにデータ変換…教えてください
313:デフォルトの名無しさん
20/05/26 23:46:26.84 l/nHkMvV.net
また馬鹿が来た
馬鹿は何をやりたいかすら自分で把握すらしていないから馬鹿なんだよ
314:292
20/05/26 23:56:54 EtaD8bXQ.net
>>230
Ruby で作ってみたけど、めちゃめちゃ複雑な仕様だった!
URLリンク(paiza.io)
315:デフォルトの名無しさん
20/05/27 01:10:50.60 bxZskA6m.net
>>291
組織なんて巨大になるほど無駄が増えていくもんだ
316:デフォルトの名無しさん
20/05/27 15:11:46 ILM8Kvmo.net
>>298
開きかたがそもそも違う
317:デフォルトの名無しさん
20/05/27 20:47:31 5ROZxNJ2.net
>>297
配列のプロパティは代入と同じくLet(値渡し)での宣言になる
でも配列は参照渡ししかできないので矛盾が起きて渡せない(ByRel宣言しろと怒られる)
Variantか、インスタンス変数をPublicにするか、Javaみたいにアクセスメソッドを作る
SetterがあるならGetterもあるだろうからPublic宣言がいいんじゃないかな
318:デフォルトの名無しさん
20/05/27 20:55:13.77 trt6Afr5.net
294です。エラーが出るコードは以下です
--------------------------------------------------------------------
Sub 入力用フォルダ内の入力用ファイル削除()
Dim myPath As String
myPath = ThisWorkbook.Path & "\入力用\" '入力用.xlsxがすでに存在したら削除
If Dir(myPath & "入力用.xlsx") <> "" Then
Kill myPath & "入力用.xlsx"
End If
End Sub
--------------------------------------------------------------------
Sub 入力用フォルダ内のファイル名変更()
Dim myPath As String
Dim myFile As String
myPath = ThisWorkbook.Path & "\入力用\" '事前にこのフォルダにファイルを入れておく
myFile = Dir(myPath & "*.xlsx")
Call 入力用フォルダ内の入力用ファイル削除 '前回の入力用.xlsxが残っていたら先に削除
Name myPath & myFile As myPath & "入力用.xlsx" 'ファイル名変更
・
・
--------------------------------------------------------------------
エラー53の際にデバッグボタンを押すと最後の
319: Name myPath & myFile As myPath & "入力用.xlsx" の行が選択されているので。「myPath」内に「*.xlsx」がない、ということでエラーになっていると 思いますが、実際にはファイルはあるのでもう一度マクロを実行するとファイル名が変更される という状況です
320:デフォルトの名無しさん
20/05/27 21:41:05 d63wepvX.net
>>298
>色々調べて作ってみたんですが
他にもあったろうに、よくそんな奇抜な方法を見つけ出したなw
そのインポートウィザード自体をマクロで記録して改造すればいいんだよ。
321:デフォルトの名無しさん
20/05/27 22:17:38.57 auut2Mwo.net
>>304
なぜエラーになった時のmyFileの値を確認しないの?
322:デフォルトの名無しさん
20/05/28 09:11:03 oSYrowbf.net
Dir関数って何でコレクション返さずに、あんな奇妙な実装なんだろ
なんか訳があるのか
323:デフォルトの名無しさん
20/05/28 09:41:03 2MUNkHgk.net
>>307
ファイルが大量にあるとコレクション取得に時間がかかる
イテレータがないVBAとかCだとDir()みたいな方式は珍しくないよ
324:デフォルトの名無しさん
20/05/28 09:59:38.59 8QzLeV6c.net
FDなんかでディレクトリエントリの順番変えて高速化とかの時代
325:デフォルトの名無しさん
20/05/28 12:03:25.03 u/WM2FVL.net
vlookupの参照値がエラーの場合に違うところに飛んでしまいます。エクセルの関数みたいにIFERROE(VLOOKUP(**,**,3,FALSE),"")みたいな処理をするためのコードを教えてください
Dim bigcnt As Long
Sub test()
Dim Pagecnt As Long
Dim rycnt As Long
Dim syouhin As Long
Dim Rowcnt As Long
For Pagecnt = 1 To MaxPage Step 1
Range("DX8").Value = Pagecnt
Rowcnt = 1
For tycnt = 12 To 30 Step 2
On Error Resume Next
Range("K" & tycnt).Value = _
Application.WorksheetFunction.VLookup( _
Application.WorksheetFunction.VLookup(bigcnt,Sheets("uuu").Range("A:C"), 2, False) & "P" & (Pagecnt * 10) - 10 + Rowcnt, _
Sheets("list").Range("B:FU"), 107, False)
Rowcnt = Rowcnt + 1
Next tyucnt
326:310
20/05/28 12:03:59.29 u/WM2FVL.net
つづき
Rowcnt = 1
For syouhin = 12 To 30 Step 2
On Error Resume Next
Range("AC" & syouhin).Value = _
Application.WorksheetFunction.VLookup( _
Application.WorksheetFunction.VLookup(bigcnt, Sheets("uuu").Range("A:C"), 2, False) & "P" & (Pagecnt * 10) - 10 + Rowcnt, _
Sheets("list").Range("B:FU"), 63, False)
Rowcnt = Rowcnt + 1
Next syouhina
Next Pagecnt
End Sub
↓のこの変でエラーがでると、次の処理が予測不能な参照値に飛びます
bigcnt,Sheets("uuu").Range("A:C"), 2, False) & "P" & (Pagecnt * 10) - 10 + Rowcnt, _
"On Error GoTo 0"にしてもvlookupで参照できずにとまり、やはり予測不能な参照値に飛びます
bigcntは正しい値に更新されていました
327:デフォルトの名無しさん
20/05/28 12:27:26 CwUX9Txr.net
next に変なカウンタつけるなよ
328:310
20/05/28 13:05:26.67 u/WM2FVL.net
すみません。
rycnt→tycnt
tyucnt→tycnt
syouhina→syouhin
329:デフォルトの名無しさん
20/05/28 13:15:00 8QzLeV6c.net
読む気無いけどvlookup使うのは高速化とかが目的?
VBAerなら自分で探したほうが融通効かないか?
330:デフォルトの名無しさん
20/05/28 13:28:52.23 VMjOSmuX.net
悪いけど、vlookup使う方がセンスいいと思うよ
331:デフォルトの名無しさん
20/05/28 13:51:27 EbwElpou.net
俺もそう思う
332:デフォルトの名無しさん
20/05/28 14:17:55.81 fQiHMFwM.net
正直まともに読む気がしなくなる
・誤字が多すぎてエラーにならないわけがない(手打ちしてるんだろ)
・シート上の範囲とかシート名、構成が不明すぎる
・同じく変数が不明すぎる(こちらはbigcntとかmaxpageとか全く知らない)
・何でデバッグで一時変数に入れるとかしないのか(二つめと四つめのVlookupは返り値とれるやろ。エラーがでるならそこかもしれんやろ、しらんが)
・なんでon errorはその二つしか試してないの、てかデバッグするなら回避しなければいいのに
速度求めるのにworksheetfunction使うのはいいけど、
こんな感じで雑に使うと可読性下がるから、そこは理解して�
333:ツかって
334:デフォルトの名無しさん
20/05/28 14:35:32.74 1No7OPPN.net
こんな感じかな
Function myVLookup(lookup, tbl As Range, col As Integer, Optional flg = True) '個人的にはflg=Falsebノしたいけど
On Error GoTo err1
myVLookup = WorksheetFunction.VLookup(lookup, tbl, col, flg)
Exit Function
err1:
'Debug.Print lookup, tbl.Address
myVLookup = ""
End Function
335:デフォルトの名無しさん
20/05/28 14:55:35.18 1No7OPPN.net
訂正
× Optional flg=True
○ Optional flg=1
VBAだから、True=-1だっけ
336:デフォルトの名無しさん
20/05/28 15:47:43 A0D9Z3DQ.net
vbaerってなんでしょうか?
337:デフォルトの名無しさん
20/05/28 16:26:49 Xg+0aVY9.net
>>320
URLリンク(google.com)
338:デフォルトの名無しさん
20/05/28 17:23:33.07 vsv+AImU.net
測定系の部署だから
エクセル関数でもリスト作ったりとかそういうのは使わないんだよぁ
計算系はすんげぇ使う
339:デフォルトの名無しさん
20/05/28 17:32:02 NxeE/SGI.net
100万行以上ある表で特定の範囲に太字があるセルがある場合にTrueを返却したいのですが、
セルをループする以外で判定する方法はないでしょうか。
ループだと遅いので他の方法を探しています。
340:デフォルトの名無しさん
20/05/28 17:40:50.70 YLdey8mA.net
太字で判定するしかない設計を見直す
341:デフォルトの名無しさん
20/05/28 17:53:26 6oAsq0wQ.net
>>323
俺も色やフォントでデータを判定する方式はExcelには向いてないから今すぐやめるべきだと思う
とりあえず、名前を付けて保存、範囲指定で太字を解除してもう一度別名保存、ファイルサイズの比較
342:デフォルトの名無しさん
20/05/28 18:24:58.06 NxeE/SGI.net
>>324-325
私もすごくそう思います。ほんとアホな現場です。
vbaや関数で高速判定する術は無いということになりますかね…
343:デフォルトの名無しさん
20/05/28 18:33:29.93 1No7OPPN.net
例えば、セルB1にして =GET.CELL(20,A1)*1 を LeftIsBold とでも名前定義
太字を確認したい列の右隣に、=LeftIsBold と入力して、それを合計する
遅いか速いかは知らないけど、Excel4.0マクロだから、ユーザー定義関数関数使うよりは早いと思う
あと、文字単位の太字には未対応
太字で判定する設計が良くないのは同意
344:デフォルトの名無しさん
20/05/28 18:44:24.85 nu6DWAbq.net
ユーザーフォームを印刷したいんだけどA4横印刷で一枚に収まるように倍率変更って出来ない?
ちょろっと調べると印刷設定に依存するとか書いてある。
吐き出し用のシートやらコード書くの面倒だし、フォームだけが印刷出来ればいいんだが本当に無理?
345:デフォルトの名無しさん
20/05/28 19:09:14 HPtbnCn7.net
>>328
1回PDFにして、PDFビューアの機能でA4フィット印刷 じゃだめ?
346:デフォルトの名無しさん
20/05/28 19:19:51 GEIkGrn6.net
>>326
XMLで読み込めば判るんじゃないの?
347:デフォルトの名無しさん
20/05/28 20:56:43 0S10FlCu.net
>>330
100万行のワークシートをXMLにするとデータ量が10陪ぐらいになることもあるから、たぶんワークシートをVBAで直接調べた方が早い
348:デフォルトの名無しさん
20/05/28 21:21:26 PIoPunSP.net
>>323
usedrangeの範囲を太字で検索してあればtrueは?
349:デフォルトの名無しさん
20/05/28 21:44:10.77 GEIkGrn6.net
>>331
じゃあXMLを自分宛てにメールで送って、Gmailで検索するのは?
ってもうExcelじゃないわ。
350:デフォルトの名無しさん
20/05/28 22:37:07 0S10FlCu.net
>>333
ネットを経由したらもっと遅くなると思うぞ
351:デフォルトの名無しさん
20/05/28 22:48:39 0S10FlCu.net
>>323
100万セルのBoldプロパティを調べるコードを作って実験してみたけど数秒で終わったぞ
範囲が限られてるなら一瞬で終わるんじゃない?
これより早くする方法はないと思うぞ