Excel VBA 質問スレ Part76at TECH
Excel VBA 質問スレ Part76 - 暇つぶし2ch446:デフォルトの名無しさん
22/06/11 00:50:08.66 c8NiZZbH0.net
>>440
ツッコミどころ満載やな

447:デフォルトの名無しさん
22/06/11 09:42:09.94 k8BssVI/0.net
A もB も
強そうな型だなオイ

448:デフォルトの名無しさん
22/06/11 11:19:57.24 zJAfd1A70.net
ストロングチューハイはやばい酔い方する

449:デフォルトの名無しさん
22/06/11 12:41:06.40 CM4vZAaMM.net
A = Bだとどうなるの?

450:デフォルトの名無しさん
22/06/11 14:14:10.27 ZxVNHiJ20.net
なんで竿がデカい方が攻めなんだよ
はっ倒すぞ

451:デフォルトの名無しさん
22/06/11 14:27:57.92 8O7zsVZWM.net
どこにも竿の大きさなんて書いてない
クラス定義まで見ない限り、何を比較してるのか、このコードだけではわからない
さては思い込みでコードを書いてバグを発生させちゃうタイプだな?

452:デフォルトの名無しさん
22/06/11 15:03:55.80 zJAfd1A70.net
分かってないだけでしょ

453:デフォルトの名無しさん
22/06/11 16:08:12.40 ZxVNHiJ20.net
If Dick(竿)A>DickB Then A=タチって書いてあんじゃんか

454:デフォルトの名無しさん
22/06/11 16:33:22.04 k7wiIunZM.net
Strongは精力じゃね?
大きさならSizeとかLengthとか

455:デフォルトの名無しさん
22/06/11 18:37:34.42 4UGI/r2E0.net
禿は精力が強い

456:デフォルトの名無しさん
22/06/11 19:01:23.35 qcSYfg6i0.net
B = Not(A)
じゃね

457:デフォルトの名無しさん
22/06/11 20:12:32.64 VlCDkB2oM.net
DickクラスのSizeプロパティは読み取り専用
Electプロパティは代入可能
Cumメソッドは1日5回以上使うと例外発生

458:デフォルトの名無しさん
22/06/11 21:54:22.38 Ejve8RvI0.net
ShapeとTextBoxをマクロで作ったのを
別のBookのSheetにコピペした時のフォントは
マクロ側とコピペ側だとどちらに依存しますか?

459:デフォルトの名無しさん
22/06/11 22:02:30.68 TK5b+qDd0.net
聞く前にやったほうが早いだろw

460:デフォルトの名無しさん
22/06/11 22:04:32.17 XvS1eUBu0.net
質問失礼いたします。
ユーザー定義型に以下のようなツリー型になる感じの物をPublicで宣言してて
クラスモジュールにユーザー定義型の変数を作っているのですが、
プロパティの作り方で悩んでいます。
以下標準モジュール内
Public Type MinorItemType ' 小項目
 minorItemName as String ' 小項目名
 minorItemID as Long
End Type
Public Type MajorItemType ' 大項目
 majorItemName as String ' 大項目名
 majorItemID as Long
 minorItem() as MinorItemType
End Type
以下クラスモジュール内
Dim majorItem_() as MajorItemType
この場合、以下のようにMajorItemType型のプロパティを作成して丸ごと渡すのか、
Public Property Get majorItem(ByVal num as Long) as MajorItemType
 majorItem = majorItem_(num)
End Property
それともユーザー定義型の中の変数へのプロパティを1つずつ作成するのか、
どちらが正しいのでしょうか?
ちなみに作成するプロパティは原則Getのみで、
変数に値を取得するのは、クラス内に作成したSubプロシージャで
シートへ値を取りに行かせる具合です。

461:デフォルトの名無しさん (ワッチョイ ff42-kGh4)
22/06/11 22:38:15 kVPUfUKj0.net
正解はない

462:デフォルトの名無しさん
22/06/11 23:57:34.93 XvS1eUBu0.net
>>456
ありがとうございます。前者の方法で行ってみます。

463:デフォルトの名無しさん
22/06/12 00:52:49.29 SFQsQSvz0.net
戦車の砲塔で行ってみてやりにくかったら変えればいいんじゃね

464:デフォルトの名無しさん
22/06/12 01:40:55.69 QoN69QoAd.net
芋芋亀してみます!

465:デフォルトの名無しさん
22/06/12 18:48:33.62 cJxXuNHT0.net
文字列の一部分に0付き右詰めの数字を入れたいのだが・・・・
a = "000000000"
b = a
Mid(a, 2, 5) = 123
Debug.Print "変更前" & b
Debug.Print "変更後" & a
 結果
変更前000000000
変更後012300000
これだと左詰めなんだが、こうなるべきじゃないの?
変更後0123 000
midにRightをかぶせてみたんだが、
Right(Mid(a, 2, 5), 3) = 123
オブジェクトが必要て言われる。
どうすればいいの?

466:デフォルトの名無しさん
22/06/12 19:03:38.39 M5mGZ9TuM.net
format(123, "000000000")じゃ駄目なの?

467:デフォルトの名無しさん
22/06/12 19:09:33.96 DaJUN4Jhd.net
Mid(a, 2, 5) = 123
の右辺を数字のままにしてるからおかしくなると思うので
CStr(123)みたいに文字列にしてからセットすればいいんじゃ

468:デフォルトの名無しさん
22/06/12 19:30:47.38 ImMFuzyy0.net
むしろ
Mid(a, 2, 5) = 123
これでなんでaが012300000になるの?どう評価されてるの?

469:デフォルトの名無しさん
22/06/12 19:37:46.32 ImMFuzyy0.net
???
Sub foo()
a = 0
Mid(a, 1) = "aaa" '通る
Right(0, 2) = "bbb" 'エラー
Debug.Print a
End Sub

470:デフォルトの名無しさん
22/06/12 20:39:25.03 uZt7xySi0.net
自分ならright("000000000" & "123"の右側を取る

471:デフォルトの名無しさん
22/06/12 21:12:13.58 DaJUN4Jhd.net
ああ右詰で数字をいれたいのか
自分のレスは無視して
そもそも桁数も統一してないからそこから見直せ

472:デフォルトの名無しさん
22/06/12 21:35:58.65 cJxXuNHT0.net
Sub sample()
'01 PIC X(1)
'01 PIC 9(5)
'01 PIC X(3)
a = "A00000ABC": Debug.Print "元データ :" & a
Mid(a, 2, 5) = Format(123, "00000"): Debug.Print "パターン1:" & a
a = "A00000ABC"
Mid(a, 2, 4) = Format(123, "0000"): Debug.Print "パターン2:" & a
a = "A00000ABC"
Mid(a, 2, 5) = Format(123, "000"): Debug.Print "パターン3:" & a
a = "A00000ABC"
Mid(a, 2, 5) = 123: Debug.Print "パターン4:" & a
a = "A00000ABC"
c = "00000"
RSet c = 123
Mid(a, 2, 5) = c: Debug.Print "パターン5:" & a
End Sub
元データ :A00000ABC
パターン1:A00123ABC
パターン2:A01230ABC
パターン3:A12300ABC
パターン4:A12300ABC
パターン5:A 123ABC
パターン1が正解なんだけど、なぜパターン4は3文字分だけ書き換えるんだろう?
パターン4がOKならパターン5でもいけるような気がするが、パターン5は空白を埋める。
RSet Mid(a, 2, 5) = 123 はエラーになる

473:デフォルトの名無しさん
22/06/12 21:46:31.55 ImMFuzyy0.net
それ以前に
Mid(a, 2, 5) = Format(123, "00000")
でエラーが出ないのがおかしいだるお

474:デフォルトの名無しさん
22/06/12 21:52:55.42 SFQsQSvz0.net
ちなみに -123 のときどうする?

475:デフォルトの名無しさん
22/06/12 22:19:45.52 +/mRZvLHd.net
ID:ImMFuzyy0
馬鹿は黙っていればいいのに
そうやって馬鹿を曝け出していると頭の皮膚も曝け出されるぞ

476:デフォルトの名無しさん
22/06/12 22:37:23.13 aOGWTw070.net
midステートメントは今ある文字列に対して別の文字列を被せるだけの動作だよ

477:デフォルトの名無しさん
22/06/12 23:03:38.74 b6RzJ+XoM.net
別の文字列を被せるのは仕様外動作だと思うけどな

478:デフォルトの名無しさん
22/06/12 23:07:02.46 ImMFuzyy0.net
何一つその動作がのってねぇ
URLリンク(docs.microsoft.com)

479:デフォルトの名無しさん
22/06/12 23:10:22.37 UzvPms3IM.net
引数以外の手段で関数に値を代入(?)するという前代�


480:「聞の珍動作 何が起きるか分かったもんじゃない



481:デフォルトの名無しさん
22/06/12 23:13:02.41 cJxXuNHT0.net
つまり
Mid(a, 2, 5) = 123

aの2文字目から5文字分ところに、"123"を書き込むんだけど、
3文字しかないから、4-5文字目は何もしないてことだよね。
でも代入の原則論から言えば、足りない部分はスペースで埋めるんじゃないのか?
RSetは足りない部分はスペースで埋めてる。
まあ、それが仕様だて言えばそうだけど、
深く考えて作られてないのかな。
もし、RSetも3文字しか代入しないのなら、RIGHTやFORMATを使わなくても0埋めができるし、
単純な代入だから性能もいいはず。

482:デフォルトの名無しさん
22/06/12 23:16:04.57 cJxXuNHT0.net
>>473
それはmid関数。
midステートメントとは別物だよwww。
URLリンク(docs.microsoft.com)
オレもさっき知ったんだがwww

483:デフォルトの名無しさん
22/06/12 23:29:45.68 nFfW5LM6M.net
そんなものがあったのか!?
けど代入元の型は文字列になってるけど数値を代入していいのか?

484:デフォルトの名無しさん
22/06/12 23:33:25.21 ImMFuzyy0.net
>>476
ありがとう!!!
気になって眠れないとこだった。俺の頭がおかしくなったのかと思ったわw
ステートメント、一度目を通しておいたほうがいいね
URLリンク(excel-ubara.com)
>>477
vbaで何をいっとるんじゃい

485:デフォルトの名無しさん
22/06/12 23:54:08.09 cJxXuNHT0.net
>>477
どの言語もできるような気もするが。
出来ない言語なんかあったけ?
化石のような言語のCOBOLでもできる。
COBOLだと9型の変数があって、VBA風にかくと
Dim a as 99999
a = 123
でaを00123にしてくれる。
a=RIGHT("00000" & 123,5)なんてやってるのをみて驚いたわ。

486:デフォルトの名無しさん
22/06/12 23:56:26.34 as/ibVfq0.net
ちなみに、MidステートメントはLetステートメントと違ってヒープ領域の再確保を行わないようなので
めちゃくちゃいっぱい文字列を結合したり置き換えたりする文字列操作をMidステートメントで高速化できたりはする
色々注意しなきゃならんしめんどいけど

487:デフォルトの名無しさん
22/06/13 14:10:09.78 cuhQaR4kM.net
mid("00000",5-len(a),len(a))=a
なんてやってるの?

488:デフォルトの名無しさん
22/06/13 15:41:58.25 e6QxpplAd.net
文字列の一部分に0付き右詰めの数字を入れたいのだが・・・・
これがやりたい事なんだから
A.MIDステートメントを使うなら右辺の値を5桁固定にする
 Mid(a,2,5) = Format(123,"00000")
B.代入するの文字列を代入先の左側+5桁固定の値+代入先の右側にする
 a = Mid(a,1,1) & Format(123,"00000") & Mid(a,7,Len(a))
あたりに落ち着くのでは 
自分は誤解されないためにもBのようなコードがいいと思うけど

489:デフォルトの名無しさん
22/06/13 18:10:47.94 S+tXl/uoD.net
自分なら
right("00000" & 123, 5)
って書く

490:デフォルトの名無しさん
22/06/13 18:28:06.25 CiY+fWgN0.net
セルの書式設定に 0000# って書けばいいのに

491:デフォルトの名無しさん
22/06/13 19:38:44.31 5YQd33j2d.net
いやどうせVBAでやるならNumberFormatLocalでやろうよ

492:デフォルトの名無しさん
22/06/13 20:02:21.45 3bSnFxDm0.net
要件にもよるが正規表現とFormat()で。

493:デフォルトの名無しさん
22/06/13 21:14:24.62 c4yOIzj40.net
>>482
URLリンク(www.moug.net)
MIDステートメントのほうが速いらしい。
でもオレが試したら逆だったけど・・・・

494:デフォルトの名無しさん
22/06/13 22:37:41.37 pISmU68J0.net
みんなのコードカッコいいわ
やっぱりコードはカッコ良くなきゃ舐められるわな

495:デフォルトの名無しさん
22/06/14 01:08:48.71 GVYlqPTN0.net
>>488
他に見るやつがいないなら動きゃいいとか思ってしまう

496:デフォルトの名無しさん
22/06/14 01:18:48.91 MKKHJJii0.net
てか若者とお年を召された方のコードの書き方が明らかに違うのだが、古臭い目新しいとかあるのかな?

497:デフォルトの名無しさん
22/06/14 02:02:23.05 GVYlqPTN0.net
今は可読性悪いのは駄目ってなってるけど逆に改行や変数名の長さすらケチってた時代もあった
んで言語が進化するにつれて書き方も変わっていった
今でも昔の方法で書けるっちゃ書けるけどそれが古臭いってことだと思う

498:デフォルトの名無しさん
22/06/14 02:07:02.10 MKKHJJii0.net
お年を召された方(60~70代)のコード見たら、やたら変数ばかり多かった印象が。
変数使わなくても普通に書けばいいじゃんて部分まで変数に入れていた。

499:デフォルトの名無しさん
22/06/14 02:33:52.97 TUO2NKc8M.net
>>492
今でもコード中に定数をそのまま書くのは別に推奨されてないぞ
せめて別の人がコードを見た時に数字の意味がわかるようにしとかないとバグの元になる

500:デフォルトの名無しさん
22/06/14 07:10:06.79 r7EVbuk4D.net
>>492のコードはVBAに限らず可読性悪そう

501:デフォルトの名無しさん
22/06/14 07:54:24.65 7uTlYRrCa.net
>>492
変数にいれないで普通の書くのか?
定数なら定数として定義すると思うが

502:デフォルトの名無しさん
22/06/14 08:25:15.24 bcp0w+/6d.net
>名著「リーダブルコード」に「説明変数」という言葉が出てくる。

503:デフォルトの名無しさん
22/06/14 08:35:10.08 T3k1EtCC0.net
マジックナンバーは避けようぜ
後で見返す時に(この4って何を意味してるんだ…?)ってなると効率落ちる

504:デフォルトの名無しさん
22/06/14 08:37:28.94 YQpYn/pu0.net
郵便番号+電話番号ていう文字列があるんだが、郵便番号、電話番号を別々の変数に入れたいので
こうしてみたんだがうまくいかない。
なにか手はある?
いまType1は項目が2個だけど、なるべく一括で入れたいのだが・・・
Type Type1
Zip As String * 7
telnum As String * 11
End Type
Sub Sample()
Dim b As Type1
a = "151123408012341234"
b = a
End Sub

505:デフォルトの名無しさん
22/06/14 09:04:23.14 06qw5AlY0.net
aの文字列が固定長なら
Left(a,7)
Right(a,11)
でダメなんか

506:デフォルトの名無しさん
22/06/14 09:11:18.76 b1sVlKW1M.net
>>498
C系やVBなら可能だけどVBAではWin32APIを使わないと無理
また、可能だからと言って、複数の変数に一括でデータを入れるような書き方は可読性が下がるので推奨されない
コードをコンパクトに見せたいなら代入部分を以下のようにモジュール化するのがマスト
電話をRightで取り出さないのは、固定電話は桁数が違うから
Sub SetNumbers(ByRef T As Type1, N As String)
  T.Zip = Left(N, 7)
  T.telnum = Mid(N, 8, 11)
End Sub

507:デフォルトの名無しさん
22/06/14 10:48:30.78 WigeF4Tr0.net
>>498
若干無理矢理だけどクラス使えば似たような事は出来る
Type1.cls
Private Zip_ As String * 7
Private telnum_ As String * 11
Public Property Let Default(N As String)
Zip_ = Left(N, 7)
telnum = Mid(N, 8)
End Property
Public Property Get Zip()
Zip = Zip_
End Property
Public Property Get telnum()
telnum = telnum_
End Property
デフォルトプロパティの設定がちょっとトリッキー、こことかを参考に
URLリンク(thom.hateblo.jp)
あとは
Dim a As New Type1
a = "151123408012341234"
Debug.Print a.Zip
Debug.Print a.telnum

508:デフォルトの名無しさん
22/06/14 13:04:52.31 IIEda1opd.net
>>487
何を目的とするかによるけど
速度は重視しないのであれば比較的周知されているBの方がいいのではと思うだけで
書き方なんて色々あるんだから試行錯誤すればいいと思う

509:デフォルトの名無しさん
22/06/14 13:11:14.27 IIEda1opd.net
>>498
記憶があいまいだけど
長さの合計値が同じになる変数を持つ構造体を作ってそれをLSetで代入すれば可能だと思う
Type Type1
Zip As String * 7
telnum As String * 11
End Type
Type Type2
Value As String * 18
End Type
Sub Sample()
Dim b As Type1
Dim a As Type1
a.Value = "151123408012341234"
LSet b = a
End Sub

510:デフォルトの名無しさん
22/06/14 13:57:57.06 yUQgc7GAM.net
>>503
それで代入だけは可能だけど、電話番号が10桁だと末尾に自動的にスペースが入って11文字に補正される
固定長文字列はTrimもできないから、結局構造体を使う方法はトラブルの予感しかしない

511:デフォルトの名無しさん
22/06/14 14:36:41.07 IIEda1opd.net
>>504
与えられたデータだけの回答だからね
与えられた情報以外の事をあーだこーだいう人いるけど
それはその時考えたらよくない?
そもそもそういう事を言い出したら
質問のできるできないはできないって回答になるわけだし

512:デフォルトの名無しさん
22/06/14 14:46:19.33 QIi9ICtD0.net
与えられたデータっていうか、前提条件がはっきりしないからなぁ
>郵便番号+電話番号ていう文字列がある
以外は試してみたっていうコードからの推測だしな
まあおれなら合体文字列のセッターと郵便番号、電話番号のゲッターのプロパティ持つクラス作るかなぁ
中身はLeftとMidでいいんじゃね
固定長で最速を目指すならLSetもありかもしれんが
構造体うんぬんより、固定長文字列がトラブルの予感を感じさせるんだよなぁ、いろんなところで

513:デフォルトの名無しさん
22/06/14 15:27:21.00 jJwMl27ba.net
固定長文字列って文字数で良いんだっけ?
全角でもおなじ?

514:デフォルトの名無しさん
22/06/14 17:23:15.55 QIi9ICtD0.net
>>507
文字数だから全角でも同じはず
というか、文字列はユニコードってことになってるから全角とか半角とかないってことになってるんだよ、いちおう

515:デフォルトの名無しさん
22/06/14 19:35:25.43 vdrsXIkl0.net
関数2つ作ればいいのにわざわざ構造体やクラスつくる意味あんのかな
処理速度を気にするのは自力で動くの作れるようになってからだぞ

516:デフォルトの名無しさん
22/06/14 20:24:08.87 sqy53zZK0.net
>>487
簡単にいうと、なんでもMidステートメントに置き換えれば速くなるってわけでもない(そういう使い方にはちょっと注意がいる)
あと固定長文字列はいかにも速そうだが実は可変長文字列よりパフォーマンスが落ちることが割とあって、これまた扱いに注意を要する
まずは自分の望む動作をするコードを完成させることに注力した方がいいんでないかな
(速度改善や利便性向上みたいなのはなんていうか、キリのない作業でもあるし)

517:デフォルトの名無しさん
22/06/15 07:33:40.74 7lj8rf8tD.net
>>509
クラス1つ作ればいいのにわざわざ関数2つ作る意味あんのかな、
って疑問を持つ奴もいるからどっちもどっち

518:デフォルトの名無しさん
22/06/15 10:47:02.71 EefWJAwfa.net
自力でやれるなら好きに組めば良いけど
それもできない初心者だからな

519:デフォルトの名無しさん
22/06/15 11:15:30.59 WoPQ0lFMd.net
こういうやり方があるよって回答だけすればあとは質問者がそれを選択するだけでいいのに
他人の回答にケチ付けるやつはなんなんだろうと思う

520:デフォルトの名無しさん
22/06/15 11:50:46.53 RetoKdFBM.net
>>513
質問の内容(仕様)が明確じゃない部分を好き勝手に解釈した結果

521:デフォルトの名無しさん
22/06/15 12:43:33.38 2pwDzYJj0.net
>>514
単に性格悪いってだけ

522:デフォルトの名無しさん
22/06/15 13:41:42.48 HRaMYgOd0.net
ユーザーフォームに毎回違う数のラベルを作った時に、それぞれのラベルでクリックイベントを作りたいのですが
ラベル数が変動するので作れません。
こういう場合、存在するどのラベルをクリックしたかを調べるにはどうすればいいですか?

523:デフォルトの名無しさん
22/06/15 14:04:25.53 2pwDzYJj0.net
>>516
昔やろうとしたけど超しんどいよ
vb6にはコントロール配列って機能があってそれを使えばよかったけど、
vbaでなぜかなくなっているので絶望的にめんどくさい
他の方法を考えたほうがいい
どうしてもやるなら「vba コントロール配列」あたりで検索して頑張ってくれ。
URLリンク(www.asahi-net.or.jp)

524:デフォルトの名無しさん
22/06/15 14:41:31.92 EFN5k3S5d.net
>>516
ラベルは最大数で作っといて、必要な分だけVisibleで見せる

525:516
22/06/15 17:15:36.58 HRaMYgOd0.net
>>517
他に方法がなさそうなのでこれでやってみます
>>518
Private Sub Label1_Click() を1000個とか作るのはちょっと汚いので止めておきます

526:デフォルトの名無しさん
22/06/15 17:23:32.33 C/XRb82A0.net
ラベルを動的に1000個作るのは汚くないのかよ

527:デフォルトの名無しさん
22/06/15 17:37:50.64 fn3i9wsI0.net
まずどうして1000個も必要なのかのほうが突っ込みどころな気がする
VBAってフォーム内でクリックした座標の検出できないのかいな

528:デフォルトの名無しさん
22/06/15 17:42:47.22 Vg/305+8M.net
クリックイベントを1000個作るぐらいならクラス化しちゃうかなぁ
どっちにしろ面倒臭いけど
大量にラベル設置した時のリネーム作業を簡単に出来る方法何かない?

529:デフォルトの名無しさん
22/06/15 17:51:28.07 2pwDzYJj0.net
いや普通につくるならプルダウンだろ
何かしらで分岐させれば3,4回の選択で済む

530:デフォルトの名無しさん
22/06/15 18:13:02.83 Vg/305+8M.net
構内マップを作らされてその上にマインスイーパみたいな升目を作らされ、機器の設置場所を設定出来るようにしたい。場所の指定は分かりづらいから文字だけにするのはNGね。なんて業務を振られる事も稀によくある

531:デフォルトの名無しさん
22/06/15 18:14:34.90 C/XRb82A0.net
何をどうしたいのか知らんし、その1000個の元データはどっからどう持ってくるのかしらんけど
Excel VBAだしな
俺ならシートで選択させてフォームのボタンかな

532:デフォルトの名無しさん
22/06/15 18:28:15.26 C/XRb82A0.net
>>524
で、それを実現するのがEXCEL VBAでラベル1000個なのか?
いろいろ検討して最終的にそれしかないとなったならまあご愁傷様
そうじゃないならあほとしか思えん

533:デフォルトの名無しさん
22/06/15 18:47:53.19 Vg/305+8M.net
それしかないじゃなくてそれしか許されないんだよ
アホかって思いながらやってるよ

534:デフォルトの名無しさん
22/06/15 18:57:22.93 myHzQmQR0.net
マス目なら座標取ればいいような気がするが許されないなら仕方がないな

535:デフォルトの名無しさん
22/06/15 19:32:37.12 JFwHiHWC0.net
a=郵便番号電話番号
b=Left(a,7)
c=Replace(a, Left(a, 7), "")

536:デフォルトの名無しさん
22/06/15 19:34:39.87 8qf24aUq0.net
1000ならまだいける、10000だったら逃げるけどな

537:デフォルトの名無しさん
22/06/15 19:40:20.96 2pwDzYJj0.net
>>529
NG

538:デフォルトの名無しさん
22/06/15 19:56:19.48 y5599rfC0.net
ワークシートの背景をマップにしてセルクリックでイメージを表示するイベント書けば?

539:デフォルトの名無しさん
22/06/15 19:57:21.42 TJhxNtAv0.net
昔ながらの紙の地図帳をイメージすればいいのか
最初のページで全体図をマッピングした概略図を掲げといて
詳細の判るまで拡大した一ページ(※)をマス目で区切って、縦に 1 2 3 横に A B C とか振り分けて
例えば B 4 とかをクリックしたら「設備名」の詳細を表示するとかか?
ユーザーフォームでそれぞれのマス目を呼び出すよりは、インデックスのSheetに全体図
そこをクリックで各Sheet (※)へジャンプとかのが楽そう  上が承認するかどうかだけど
上に承認してもらうようにサンプル作ってプレゼンしてもいいし

540:デフォルトの名無しさん (スッップ Sd1f-UWq1)
22/06/15 21:04:50 m3jNjkHdd.net
コントロールフォームの動的配置 & クラスモジュールでイベント起こすに一票
どうせどこかでイベント共通化の処理が入るだろうからスケーラビリティ確保のためにも

541:デフォルトの名無しさん
22/06/15 21:45:31.66 y5599rfC0.net
>>534
うぬ、それが一番だと思うけど何故にエクセルなのかと思ってしまう

542:デフォルトの名無しさん
22/06/16 01:45:48.79 s8B3FZ9N0.net
1000個のラベルと見せかけて、
実は1個だけラボルが混ざってるんじゃないだろうか。

543:デフォルトの名無しさん
22/06/16 07:24:34.47 FKA1V1750.net
テキストファイルを開いて1行ずつ中身を読んでます。
Open ファイル名 For Input As fNo
Line Input fNo, buff
途中まで読んだあと、先頭から読み直したいです。
ファイルを閉じてまた開くのは嫌です!
下のURLを参考にして、
FileSystemObjectを使ってすべてを1変数に読み込み
改行コードで区切って配列化して
先頭から読み直したいときは配列の先頭から読みなおし
という方法を思いつきましたがコード修正が大変なので
もっと楽な方法をご教示いただけたら幸いです。
URLリンク(bokulog.org)

544:デフォルトの名無しさん
22/06/16 07:25:26.98 FKA1V1750.net
sageそこねスミマセン

545:デフォルトの名無しさん
22/06/16 08:10:36.64 fGEidPk00.net
>>529
1桁足りないじゃんって思ったら
Optionbaseデフォルト値でやるのが普通なのか?
俺はどうにも馴染めないので1でやってるが

546:デフォルトの名無しさん
22/06/16 08:12:48.83 H6wZRQj3M.net
>>537
vbaにseekってなかったっけ?

547:デフォルトの名無しさん
22/06/16 08:52:14.47 ijJBEomdd.net
どんなコード書いててそこからどんな手直しするかわからないのに回答のしようがないよね

548:デフォルトの名無しさん
22/06/16 10:17:53.34 G3W4msQ6a.net
>>537
ファイルを閉じて開き直すのが祖谷な理由が書かれてませんので
嫌でもやればいいんじゃね

549:デフォルトの名無しさん
22/06/16 10:35:38.36 OXzWqs7e0.net
IE終了したけど、今日の時点ではVBAからIE操作できた。いつまで保つか明示されてる?

550:デフォルトの名無しさん
22/06/16 13:56:39.50 j/xQYS4f0.net
サポートしないだけで
PC内にIEがある限り
永久に使えるんじゃないか?

551:デフォルトの名無しさん
22/06/16 14:04:02.85 9IfQq+aNM.net
そのうち深刻な脆弱性が見つかったらセキュリティソフトでウィルス扱いされるようになって、
IEコンポをロードした瞬間にウィルス警告が出るようになるだろうな

552:デフォルトの名無しさん
22/06/16 14:55:49.33 TulzdQgt0.net
WannaCryのときMSはサポート外にパッチ出しちゃった前科あるからなあ
なんだかんだ面倒みそうでなあ

553:デフォルトの名無しさん
22/06/16 19:55:32.69 g5Jzetu50.net
>>543
7年くらい大丈夫と見たような気がする

554:デフォルトの名無しさん
22/06/16 21:22:11.67 wccj32jkd.net
>>547
何の根拠もないな
危険な脆弱性が明日見つかったらそれで終わりだよ

555:デフォルトの名無しさん
22/06/16 23:09:10.84 BfseDl080.net
URLリンク(www.ka-net.org)
素直にedgeに対応したコンポーネント出してほしいなぁ
webapiからjsonを読み込むときにIEだけはいちいちダウンロード確認のポップアップが出て止まる挙動で苦しんだ記憶があるから嫌い

556:デフォルトの名無しさん
22/06/17 02:08:51.88 qX3KJPna0.net
>>540
Seek命令あるけど、あれランダムかバイナリモード用だと思う
が、試したがシーケンシャルファイルでもバイト位置で指定できるな

557:デフォルトの名無しさん
22/06/17 07:31:22.44 tno+JwDPr.net
>>547
エッジで互換モードする期間じゃない?

558:デフォルトの名無しさん
22/06/17 08:55:59.12 LpDNne3Kd.net
IEで終了したのは「アプリ」の「サポート」だけだぞ
IEオブジェクトはしばらく残すと明言してるから、マクロから使うのはまだ問題ない
けど、猶予期間の今のうちに社内ルールの変更など根回しはちゃんとやっとけよ

559:デフォルトの名無しさん
22/06/17 13:19:56.68 6WxlvkUPd.net
IEが非対応のサイトも増えてくるから対策出来るならした方が良いのはわかってる
が現状Selenium Webdriverが最適解のようでいちいちバージョン合わせるためにダウンロードしたり記述が変わったりすげー面倒
MSがどうにかしてくれると淡い期待をしたいが

560:デフォルトの名無しさん
22/06/18 02:47:00.46 x1pEIMNT0.net
Edgeに限らず、新しくなって使いづらくなるのホント意味不明。
PC起動するとWindows11にしませんか?って言われるけど、もうお前なんか信用しとらんわ!

561:デフォルトの名無しさん
22/06/18 06:12:14.25 tcSE7QQr0.net
まぁしょうがない
良かれ悪かれ何でも時代の変化で変わって行く
VBAは関係ないけどちょっと前にとあるシステムで
IE → EDGE の移行作業行ったよ
開発ツールは確かにIEの方がEDGEより
使いやすかったと思う。慣れだろうけどね。

562:デフォルトの名無しさん
22/06/18 06:56:56.06 8iz4uO0y0.net
世の中がセキュリティに舵を取るようになったからね
楽観論じゃなりゆかない時代なんだから仕方がない

563:デフォルトの名無しさん
22/06/18 08:20:33.50 7fgrQLBR0.net
セキュリティを理由に広告ゴリ押し
こうはなりたくないね

564:デフォルトの名無しさん (ワントンキン MM8a-ctFn)
22/06/18 10:08:00 SSs68PlgM.net
もうマイクロソフトの為に仕事するのやめませんか?

565:デフォルトの名無しさん (アウアウウー Sa47-iAjv)
22/06/18 10:08:32 Os2AgP5Ia.net
ieで取れなかった個人情報を集めてるからな

566:デフォルトの名無しさん
22/06/18 10:59:15.44 0BdDrqNN0.net
ExcelもIEも何年も使ってないわ
kneetじゃねーよ

567:デフォルトの名無しさん
22/06/18 11:55:08.82 +2kbSQo1M.net
VBAもそろそろかな

568:デフォルトの名無しさん
22/06/18 13:40:01.62 T0WefD6fd.net
そう言われ続けて20年たった

569:デフォルトの名無しさん
22/06/18 16:09:32.02 JcC1S0zs0.net
VBA無くなればこのスレも下火になるかもな。
パワークエリスレが活気出る

570:デフォルトの名無しさん
22/06/18 16:29:16.53 Es40ajdn0.net
PowerQueryは万能じゃない
VBAと比較するもんじゃない

571:デフォルトの名無しさん
22/06/18 18:07:43.74 lnn1Xxq/M.net
PowerShellは万能だぞ
ExcelのワークシートもWEBブラウザも操作できる

572:デフォルトの名無しさん
22/06/18 18:14:09.38 59smDk8ed.net
デフォのPS 5.1はクソだけどな
BOM付きUTF-8を要求したり権限厳しかったり

573:デフォルトの名無しさん
22/06/19 01:44:47.25 7uc9nhCj0.net
万能かもしれんがVBSみたいな手軽さが無いのがな…

574:デフォルトの名無しさん
22/06/19 10:44:47.27 uZGRAEGZp.net
Power shellは
.Net Freamworkが入ってなければただのShellだもんな
なら素直にVSの類いれとけばいい

575:デフォルトの名無しさん
22/06/19 21:06:19.28 +DYD1D5ZM.net
Powershell 7は.NETと関係ない汎用のコマンドラインシェル
macOSやLinux向けの製品すら存在する

576:デフォルトの名無しさん
22/06/19 21:33:18.64 nfQGh1M+d.net
追加でWebからインストールしなきゃいけないPowerShell(6以降)に存在価値はない
それが許されるんならあえてPowerShellなんて使わずとももっと優れた選択肢がいくらでもある

577:デフォルトの名無しさん
22/06/19 22:00:01.16 c6U60qvsM.net
Win11でもオプションなの?
うちいまだにWin10だからわからん

578:デフォルトの名無しさん
22/06/20 09:16:41.32 ZiXH0O+ed.net
win11でも入ってるのは5だけ
6以降はサポート期限がLTSでもリリースから2年しかないから、
仮にWindowsにプリインストールすると2年ごとにWindowsの更新で強制的にメジャーバージョンが上がって既存資産がぶっ壊れるリスクが生じる
だからどうしてもユーザーの自己責任で塩漬けにできる選択肢が必要で、Windowsの一部として扱うことが不可能なんだよ

579:デフォルトの名無しさん
22/06/21 14:59:24.30 nrTPRY1Pr.net
質問です

580:デフォルトの名無しさん
22/06/21 15:16:20.71 nrTPRY1Pr.net
質問です
ある動画で「連想配列とユーザー定義型を組み合わせると便利」ということで色々勉強していたのですが、ユーザー定義型ってpublic宣言しても別モジュールで呼び出せないですよね?
てことは別モジュールにプロシージャがあって、それを引数設定して呼び出してもエラーになりました
そこでクラスモジュールを使っても同じような事ができると聞き、クラスモジュール内に3つ型を宣言した変数を作ったのですが、それを配列に入れようとすると「配列に入れることができません」というエラーがでます
具体的には以下のとおりです
Dim c() as class1
Set c = New class1 ←ここでエラーがおきます
この記述を
Dim c() as New class1
とすればエラーは起きないのですが、別モジュールの引数に
sub test(c as New class1)と記述はできないので困っています
なにかいい方法はないでしょうか?

581:デフォルトの名無しさん
22/06/21 16:23:50.93 NaTv3t2Wr.net
すみません
私の勘違いでした
普通にユーザー定義型でできました

582:デフォルトの名無しさん
22/06/22 00:02:57.35 fcQ3wVRo0.net
ネタ投下
「貴様は一体何を仰ってるんだ」Excelマクロの納品時、担当者に言われたひと言にTwitterざわつく - 「良さを完全に殺しに来てる」の声も
URLリンク(news.mynavi.jp)

583:デフォルトの名無しさん
22/06/22 01:16:32.40 /230SSBOd.net
>>576
くだらなすぎる
読むのは時間の無駄

584:デフォルトの名無しさん
22/06/22 02:03:36.70 /pBOMLc50.net
うさんくせー
セミナー屋ほど胡散臭いのはないわ、
やっぱ5ちゃんねるが一番!

585:デフォルトの名無しさん
22/06/22 07:25:36.31 dKKatMvdD.net
嘘松藁人形
手作業大好きおじさんが一人いましたって面白くもない話

586:デフォルトの名無しさん
22/06/22 07:29:12.94 bFCzOkRx0.net
話の内容はともかく客に説教とかアホすぎる

587:デフォルトの名無しさん
22/06/22 09:39:47.61 fcQ3wVRo0.net
「ミスが起こるような仕組み」でなくて、
まるっきりブラックボックスでもなく、
人が過程を辿れるようなの、作りたいな・・・
とは思う。

588:デフォルトの名無しさん
22/06/22 11:11:38.88 SHGr4jOjd.net
完全にネタ、作り話だろこれ
そもそもVBAごときでミスが起きないシステムなんて作るの不可能だし
マクロはたくさんある工程の一つに過ぎないんだから、業務全体で見ればミスが起きる余地なんてほかにいくらでもあるだろうに

589:デフォルトの名無しさん
22/06/22 11:58:03.94 qNhhYbIzd.net
話題にするだけばからしいでしょ
こんなの言ったもん勝ちだしね

590:デフォルトの名無しさん
22/06/22 12:09:22.34 PZ27NODvM.net
ブラックボックスでミスが見つけられない
を独自解釈しただけだろ

591:デフォルトの名無しさん
22/06/22 13:02:01.70 acQQyPov0.net
>>581
どうせDebug.Printするんだろうからデバッグモード付きで納品すればいいんじゃね

592:デフォルトの名無しさん
22/06/22 13:45:53.56 5jQGKRYma.net
マクロの作成頼まれたけど要求内容があまりにも怪しかったので、
マクロと一緒に「入力に対する出力が合っているか」と「そもそもの入力が誤っていないか」を簡易的に(電卓などで)求められる計算方法を渡した
そしたら約3ヶ月に一回ぐらいの割合でそもそもの入力すべきデータを誤っていたことが判明した
ってことはあったな
後で調べたら、こういうのは「封筒裏の計算」っていう手法らしいけど

593:デフォルトの名無しさん
22/06/22 13:46:18.61 qNhhYbIzd.net
>>581
保存期間なり世代管理してログ出力すればいいでしょ

594:デフォルトの名無しさん
22/06/22 15:52:29.00 acQQyPov0.net
>>586
祝儀袋の封筒に書かれた金額と入っている金が違うやんってことか
なるほど日本人はうまい例えを作るもんだと思ったら全然違ってた

595:デフォルトの名無しさん
22/06/22 17:31:38.14 /pBOMLc50.net
わろた

596:デフォルトの名無しさん
22/06/22 19:32:15.50 XefayqmG0.net
Excel2013のVBAで
Debug.Print (1 = 1) * 1
てやると-1になるけど、
セルで
=(1=1)*1
て入れると1になる。
これって不具合?

597:デフォルトの名無しさん
22/06/22 19:47:11.74 5Bb+Exnq0.net
ワークシート上の(1=1)、つまりTRUE値は「1」だけど
VBAでのTrue値は「-1」だから合ってる

598:デフォルトの名無しさん
22/06/22 21:45:57.03 Io6qCa48M.net
>>576
毎日新聞の戯言
お前暇やろ

599:デフォルトの名無しさん
22/06/23 00:03:21.37 RpD62pBf0.net
VBAは好き
どんな職場で働けばいいの?
正社員じゃなくていいです。

600:デフォルトの名無しさん
22/06/23 06:39:08.02 d1WC2qsrM.net
>>593
事務派遣。
ゆるい職場ならvba使用が禁止されて無いから与えられた業務で使って見ればいい。

601:デフォルトの名無しさん
22/06/23 06:45:25.15 ms1G02BaH.net
ワイまさに派遣事務でたまにVBAやってこちらのみなさんにお世話になってる(*´ε`*)

602:デフォルトの名無しさん
22/06/23 07:34:26.56 OFyvXiPXd.net
>>593
日本で働くのはやめておけ
将来性無いぞ

603:デフォルトの名無しさん
22/06/23 07:40:40.65 SBEKkY350.net
>>593 派遣おすすめ vba縛りの事務なら、めちゃくちゃ楽で定時に帰れる そういう人を見たことある 一生生きていけるだけの金もってたら、 そういう人生送りたかったってぐらいやりたい生き方だわ



605:デフォルトの名無しさん
22/06/23 09:00:02.54 KOp9wOBp0.net
生涯困らない金があって、VBAの事務作業か  もっと他に・・ いや、どうぞご自由にだけどさ

606:デフォルトの名無しさん
22/06/23 09:06:50.94 SBEKkY350.net
>>598
一時金持っててさ、毎日酒のんでゲームしてパッパラパーな人生送ってたのよ
当然、あっという間に体壊して病院行き
適度な仕事は、自分の健康につな


607:がるよ



608:デフォルトの名無しさん
22/06/23 09:13:48.26 RH4NXyqT0.net
貧困な想像力って悲しいよね

609:デフォルトの名無しさん
22/06/23 10:45:06.10 omFSpe9sd.net
VBAしかできないやりたくないような人だとしたらそのような人を使ってくれるところは少ないのでは・・・
なのでここで聞いてもいい回答はもらえないでしょ

610:デフォルトの名無しさん
22/06/23 10:56:16.87 M4XLJX6ga.net
いまさらVBAには関わりたくないな
そもそもVBA自体よりもVBAを使ってる連中と関わりたくない

611:デフォルトの名無しさん
22/06/23 12:20:08.77 QS7NhMN+a.net
安定のNHK

612:デフォルトの名無しさん
22/06/23 12:41:27.99 8671gq8M0.net
なんでココにいるのか?
ってツッコミ入れたら負けなんかなw

613:デフォルトの名無しさん
22/06/23 13:16:25.44 Qj8PYDZt0.net
ちがうでしょ、所謂かまってちゃんでしょ。
慰めてやるべき

614:デフォルトの名無しさん
22/06/23 13:34:30.38 iXtKw0QdM.net
プログラマからしたらVBAしか出来ないって使えないやつでしかないからなぁ

615:デフォルトの名無しさん
22/06/23 14:08:36.94 SBEKkY350.net
>>606
無知なのにテキトーに言い過ぎ
vbaは特殊で、保守がメインの現場ばかり。vba使えればそれでいい
立ち位置的にはCOBOLに近い

616:デフォルトの名無しさん
22/06/23 14:41:25.25 RH4NXyqT0.net
>>607
世の中を知らなすぎ
どんどんVBAは消えていってる
MSすらVBAではなくPython導入しようとしてたが、
openpyxlやxlwingsの出来が良かったのでそれらを薦めてるんだよ
突然IEのサポートが終わるとか言ってる奴くらいだぞ知らないの

617:デフォルトの名無しさん
22/06/23 14:45:19.51 SBEKkY350.net
>>608

だから保守メインって言ってるじゃん
新規開発なんて無く基本的に別言語とは関わりがない

618:デフォルトの名無しさん
22/06/23 14:51:02.16 9dA5CJ8Sd.net
そのツールでできるならどんなの選んでもいいだろ
>>608みたいなのはそんなこともわからず俺こんなの知ってるぜスゲーだろって言いたいだけのかまってちゃんだろ
VBAはそもそも基本的にWindowsPCなら入っているであろうExcelさえあれば
他に何も入れなくても使う事ができるという1点で他にはない優位性があるわけだし
職場によっては変なものを入れるのはNGみたいなところもあるんだから
そういう事も踏まえないでただ批判だけするのはおかしい話

619:デフォルトの名無しさん
22/06/23 15:10:52.41 Ukh7Grgra.net
ほらな
やっぱりVBAだろ

620:デフォルトの名無しさん
22/06/23 15:22:59.47 RH4NXyqT0.net
>>609
VBAからPythonへのリファクタリングが進んでるって話だよ
リファクタリングって新規開発ではなく保守なんだけど理解できないようだしなw
今後もVBA使っていくつもりなら、
VBAがやがてどうなるとか調べるのはかまってちゃん以外でも当然の行為だろ
ましてや仕事なら尚のこと

621:デフォルトの名無しさん
22/06/23 15:38:55.20 SBEKkY350.net
>>612
へぇ、それは知らなかったわ、物知りだな~
具体的にはどんな案件がvbaからpythonになってるの?

622:デフォルトの名無しさん
22/06/23 15:45:42.70 SBEKkY350.net
エクセル・accessの簡易的・汎用的な入力方法を全部捨てて、
pythonで作り直す案件とはどういうものなのだろうか?
概算するまでもなくものすごく高くなるんだけど、一体どういう案件だとコストダウンになるのだろう?
早く回答してほしいなぁ。まだかなぁ

623:デフォルトの名無しさん
22/06/23 16:48:28.59 RH4NXyqT0.net
>>614
openpyxlやxlwingsって具体的な名前出してるのに調べたり理解できない奴が煽ってるのか
無知な上に調査も思考もできない役立たずがVBAだけで食っていくとか何の冗談だよ

624:デフォルトの名無しさん
22/06/23 17:06:30.04 Qj8PYDZt0.net
VBAだけじゃなくて、Excelの一通りの知識も必要では?
事務員なら

625:デフォルトの名無しさん
22/06/23 17:13:43.84 SBEKkY350.net
>>615
おう見落としてたわサンキューな
勉強してくるわ

626:デフォルトの名無しさん
22/06/23 19:20:48.18 xtvi5Qi8a.net
案件って言ってるのに
> openpyxlやxlwings
とか、アホ丸出しやんw

627:デフォルトの名無しさん
22/06/23 19:24:07.75 SBEKkY350.net
>>618
その単語だけで内容は伝わるよ

628:デフォルトの名無しさん
22/06/23 19:41:27.49 T964c/cqM.net
派遣でvbaてアホすぎるだろ

629:デフォルトの名無しさん
22/06/23 19:50:50.76 YBqf9Go9H.net
>>620
なんで?>>595だけどVBAやらされることもあるんだけど、、
まあ大したものじゃないけどね(^_^;)ちなみに女です。

630:デフォルトの名無しさん
22/06/23 20:41:26.32 8GFyplgN0.net
>>619
内容説明してみ
まあ必死ではぐらかすんだろうけどw

631:デフォルトの名無しさん
22/06/23 20:48:49.23 SBEKkY350.net
>>622
これがあればvbaをpythonに置き換えるコストがクッソ下がる。案件は基本的に何にでも対応できる
なかったらめちゃくちゃなコストになるから非現実的だと思ってた

632:デフォルトの名無しさん
22/06/23 21:09:00.04 8GFyplgN0.net
>>623
> openpyxlやxlwings
の説明なんて要らんよ
> 具体的にはどんな案件がvbaからpythonになってるの?
の回答よろしく

633:デフォルトの名無しさん
22/06/23 21:25:01.78 SBEKkY350.net
>>624
知らんよ。俺は見たことない
どんな案件にでも対応できるからユーザー側がpythonを指定して発注することは少ないだろう
開発側の好みでpythonを選んでいるだけだろうな
webサーバーで処理するという点ではエクセル→スプレッドシートの移行にかなり近い。

634:デフォルトの名無しさん
22/06/23 21:39:08.37 8GFyplgN0.net
知らんのならいちいち絡んでくるなよ...
そもそもどんな内容が伝わると思ってたんだよw

635:デフォルトの名無しさん
22/06/23 21:55:24.01 SBEKkY350.net
何でも低コストで作れる以上、具体的な案件なんてもう必要ないだろう

636:デフォルトの名無しさん
22/06/23 22:56:14.90 Qj8PYDZt0.net
会社の人事部の仲良い人に聞いたけど、派遣君でVBAできるヤツは希少な人材と言っていたぞ
ましてやExcel自体まともに操作できない派遣が多い中で。

637:デフォルトの名無しさん
22/06/24 03:54:27.16 ctS3zPLY0.net
まぁ手広くやるかVBA極めるかだろうけどある程度は手広くやらないとね
「VBAは死ぬ」と言われてもう随分経つけど一向に死ぬ気配はないのは確かだけど
VBAしか出来ないとOfficeに乗っかったアプリしか開発出来ない井の中の蛙状態になるのも確か。
それに他言語やってるとその言語の考え方も取り入れてVBA作るようになるから何かひとつやるにしても取れる手段が増えるんだよね。
まぁ個人的にはPythonは下手に手をつけると算数しか出来ないバカな俺には数学出来ないといけないお仕事が降ってきそうでちょっと敬遠するけど。
後JAVAは個人的に肌に合わなかったのでやって良かったってなるのか分からないけど、
JavaScriptはWeb系やるならまず必須になるし、とりま後はC#辺りやっとけばいいんじゃないかと思う。

638:デフォルトの名無しさん
22/06/24 04:14:34.15 ctS3zPLY0.net
後、このスレには俺みたいなジジイが結構いるみたいだから話しておくと、
遠い昔まだPCがマイコンとか呼ばれていた頃、すがやみつるって「ゲームセンターあらし」とかいう漫画描いてた人が「こんにちはマイコン」ってBASICでブロックの無いブロック崩しみたいなののプログラムを作る工程を漫画で説明しながら描いてたんだけど、
ちょっと前に「こんにちはPython 」って同じ感じの内容をPython でやってるのを出してたから話のネタに買ってもいいかも知れないよ。
ただ、新品買うほどの価値があるかは微妙だから中古でもいいと思うけど。
まぁスレ違いだからこの辺にしとくわ。

639:デフォルトの名無しさん
22/06/24 04:39:40.48 61TcLrsp0.net
activecellを使って掛け算をしたい時どうすればいいのか分かりません
教えていただけたら嬉しいです。
inputboxで数値を入力してその数値を使って計算したいです。計算する時にactivecellを使いたいです

640:デフォルトの名無しさん (ワッチョイ 1768-GvQ2)
22/06/24 07:42:23 24qb8CGk0.net
>>631
Sub foo()
Debug.Print ActiveCell.Value * InputBox("")
End Sub

641:デフォルトの名無しさん (アウアウウー Sa47-vQ73)
22/06/24 09:49:37 K2we1Lara.net
こういうのが尼崎事件を起こすんだろうな

642:デフォルトの名無しさん
22/06/24 12:20:36.40 SlsiDUV+a.net
需要と供給

643:デフォルトの名無しさん
22/06/24 15:06:54.11 kZFfj4TG0.net
難しい話ね。
これから他の言語も必要なら習得の必要あるしね。

644:デフォルトの名無しさん
22/06/24 15:26:03.25 bvc+MoD20.net
VBA覚えるの大変ですね
理解してコピペできるくらいにはなりたい

645:デフォルトの名無しさん
22/06/24 15:31:46.16 RLAl6U0RH.net
一度VBAエキスパートとか取るくらい勉強すれば
毎回Offsetの横は行が先か列が先かどっちだったかな?って(Resizeでも同じことやってる)やってるワイでも
大体コピペで作れるくらいには成長するよw

646:デフォルトの名無しさん
22/06/24 19:49:28.19 bvc+MoD20.net
>>637
ありがとう
やってみるか
参考書検討しようかな

647:デフォルトの名無しさん
22/06/24 20:26:28.92 oJCwQA/d0.net
コピペしたVBAってみんな捨てて去ってるのかな、貰ったことないかも。

648:デフォルトの名無しさん
22/06/24 21:29:08.60 kZFfj4TG0.net
コピペはダメと教わったがな最初の会社で。
あちぃなしかし今日は

649:デフォルトの名無しさん
22/06/24 21:34:54.88 p6zHePCT0.net
熱がこもって32度あるわ

650:デフォルトの名無しさん
22/06/24 21:35:55.33 p6zHePCT0.net
コピペしてそのまま使うことはほぼなくなる
コンパクトにまとめないと、後で見て何書いてるかわからなくなる

651:デフォルトの名無しさん
22/06/24 23:00:17.91 oJCwQA/d0.net
ネットにうpしてあった100行のやつをコピペして100000行にしてる、コンパクトという発想がなかったわ。そもそも意味わかんない行もあるけど消すと動かないし。
後任に渡そうと思ったけど恥ずかしいからやめとくか...。
おまえら上級者なんだね。

652:デフォルトの名無しさん
22/06/24 23:49:49.39 ueFhN9Vh0.net
VBAはコピペして動くからいいよな。
Pythonはだいたい動かない。
しかも、Pythonのページ作るやつて
断片的にソースを乗っけるから、なおさら動かない。

653:デフォルトの名無しさん
22/06/24 23:54:16.48 WnxbT+0Sr.net
コピペして動かすのって怖くないか?
少ない量ならまだしも100行だと何が起きてもおかしくない

654:デフォルトの名無しさん
22/06/25 01:09:59.54 XeF3ZBAK0.net
それを修正できるスキルがあれば別かもだけど、なかなかいないのでは

655:デフォルトの名無しさん
22/06/25 08:29:17.86 hk0FSiYld.net
ネットソースだとwsの指定とか省略されててコピペじゃ怖くて使えたもんじゃない

656:デフォルトの名無しさん
22/06/25 09:09:54.09 HMw3/wS6H.net
自分で一から書ける能力があればわざわざコピーなんざしないのさ。。。(-_-)
切り貼りつぎはぎだらけで変数の宣言がぐちゃぐちゃになってる
分かってくれる人いないかな(笑)

657:デフォルトの名無しさん
22/06/25 09:43:24.30 XeF3ZBAK0.net
独創でコード書けないと保守で詰むでしょ。

658:デフォルトの名無しさん
22/06/25 10:00:09.34 kapo/xgia.net
コピペが悪いのではなく、コピペで作ったコードを自分が提供した責任があるのだよ

659:デフォルトの名無しさん
22/06/25 10:15:11.28 HMw3/wS6H.net
>>649
自分だけで時間短縮のために使ってるマクロだからそんなに困らないよ
みんなに配布するレベルはこれからもしないと思う^^

660:デフォルトの名無しさん
22/06/25 10:49:20.62 Wc9Qs34b0.net
>>648
分かるけど理解はしない
それを許したらそこでおしまい

661:デフォルトの名無しさん
22/06/25 10:54:34.90 PITDVbGU0.net
まあ自分で使うだけならいいんじゃね

662:デフォルトの名無しさん
22/06/25 12:26:01.77 W4jZJdCLd.net
書ける能力あっても今までに作ったコードをコピペするだろ?
場合によっては共通関数の入ったモジュール程度を持ってくるにしても
お前らもしかして同じこと1から書いてるの?

663:デフォルトの名無しさん
22/06/25 12:41:36.76 7YC4We+Er.net
別部署に行って、「規則が変わるからこのマクロも修正してくれ」って言われ、中を見てみたらセレクトメゾットやコピーメゾットが使われてた時の絶望感
「クリップボードの履歴を有効にしていると正常に作動しない事があるから必ず無効にしてくれ」ってそれ書き方おかしくないか?
そして変数の宣言が強制されていなくて更に絶望する

664:デフォルトの名無しさん
22/06/25 12:56:07.50 Fu1pMYi/M.net
>>655のレベルもたぶん似たようなもんだよ

665:デフォルトの名無しさん
22/06/25 14:57:17.56 XeF3ZBAK0.net
>>654
と言うより、作って使用したらマクロは消しているのです。
再び必要になったら1から書いてますはい。
職場のローカルルールとして。

666:デフォルトの名無しさん (ワッチョイ 3f7c-PGuA)
22/06/25 17:13:39 ehcxDoIm0.net
>>657
ないわー
関数自体が使いまわし前提の考え方だし

667:デフォルトの名無しさん
22/06/25 17:43:12.02 hk0FSiYld.net
>>654
理解しないでコピペするか理解して書いたコードを使い回すかの差は途轍もなく大きい

668:デフォルトの名無しさん
22/06/25 18:56:11.02 XeF3ZBAK0.net
それどころか回りの奴らはVBAにしろExcelの学習すらやろうとしない。
仕事終わったら飲みに行く事しか考えていない。休日も何も努力しない現実。
興味ないヤツには進めてもダメなのかな

669:デフォルトの名無しさん
22/06/25 19:21:59.19 WbawSRHfM.net
VBA使いに向上心を求めるのは酷でしょ
それがないからこそVBA止まりなのに

670:デフォルトの名無しさん
22/06/25 21:29:35.48 Ujo38STt0.net
>>660
自分が使うのは勝手にしろだけど、それで優越感に浸って「周りの奴らは~」とかキモすぎだろ
たかが仕事で使うの1つのツールごとき にここまでイキれるのはヤバいわ

671:デフォルトの名無しさん
22/06/25 21:31:08.83 tv1Cabyi0.net
他はすべて負けてるから何か一つでも勝てるものがほしいんや

672:デフォルトの名無しさん
22/06/25 21:32:27.25 xn3lQ0RO0.net
レスバで勝てば世界ランクあがるしな

673:デフォルトの名無しさん
22/06/25 21:44:09.88 VazVwqbS0.net
>>647
それってコピペしただけじゃ動かないってことよね?
動くように自分で指定すると思うんだけど、こわいってのはどういう事なんだぜ?

674:デフォルトの名無しさん
22/06/25 21:53:20.34 Of9vbGQH0.net
>>663
負けの数ではお前が一番だ

675:デフォルトの名無しさん
22/06/25 22:26:51.85 XeF3ZBAK0.net
勝利するかために複雑な知識や技術を身につけているのだが??
間違ってる?

676:デフォルトの名無しさん
22/06/25 22:29:13.51 hk0FSiYld.net
>>665
wsを指定しないとActiveSheetで動こうとするから誤作動の原になる

677:デフォルトの名無しさん
22/06/26 00:40:58.82 NOZ7SEa20.net
Webbrowserで証明書を自動選択する方法は無いものでしょうか?

678:デフォルトの名無しさん
22/06/26 00:44:34.36 NC1QoP++r.net
>>667
誰に勝利するの?
何に勝利するの?

679:デフォルトの名無しさん
22/06/26 07:38:11.30 5vPg/0Rp0.net
他言語やったからって
excelやVBAでやったことが無駄になることはないよ
他の言語で作ったもののUTのエビデンスをとるのに
excelがもし無ければと思うとゾッとするし
テストデータ作成にもVBA使うととっても便利な場合が多いし

680:デフォルトの名無しさん (ワッチョイ 8f63-BYhf)
22/06/26 09:43:13 /e5N//9v0.net
エクセルのある列に数字が入ってます。
そのエクセルと同じ階層にあるフォルダの下に
上記の数字から始まる名前のフォルダがあります。
(数字のあとに日本語が付いてます)
このフォルダの探し方を教えていただきたく

681:デフォルトの名無しさん (ワッチョイ 0f63-BYhf)
22/06/26 09:45:37 Xa6L6yDT0.net
会社のパソコンでVBAを使って
pdfをテキストへ変換しています。
(com.adobe.acrobat.plain-text)
変換処理は不安定でエラーが出ることが多いが
成功することが多いです。
しかし有料ライセンスは一切買ってもらっていません。
これはライセンス違反ですよね??
違反ならもうやめます。

682:デフォルトの名無しさん (ブーイモ MM5f-c/Mv)
22/06/26 09:56:38 IFq6Yt8DM.net
>>672
num=cells(行,列).value
dirname=dir(thisworkbook.path&"\"&num&"*",vbDirectory)

683:デフォルトの名無しさん (ブーイモ MM5f-c/Mv)
22/06/26 09:59:07 IFq6Yt8DM.net
dirname=dir(thisworkbook.path & "\" & num & "*", vbDirectory)

684:デフォルトの名無しさん
22/06/26 10:18:26.90 6drPPg2U0.net
>>673
PowerQueryでもAdobeのAcrobatなしで
pdfをある程度変換出来るけど?

685:デフォルトの名無しさん
22/06/26 10:25:43.07 yfX3wl/l0.net
>>673
adobeに聞けとしか

686:デフォルトの名無しさん
22/06/26 11:39:03.04 XMcnD9d40.net
EULA読んでダメって書かれてなきゃいいだろ

687:デフォルトの名無しさん
22/06/26 12:11:58.60 hFDBYOe90.net
クラスが入ってるCollectionの要素を置き換えるにはどうすればよいでしょうか?
Set col(2)=New MyClass()
とやってもできないんです。

688:デフォルトの名無しさん
22/06/26 12:23:08.37 tixRR40Y0.net
置き換えはダメだからRemoveしてAdd

689:デフォルトの名無しさん
22/06/26 13:30:17.16 hFDBYOe90.net
>>680
そうですか
ありがとうございます
でもなぜ置き換えできないのでしょう?
そのしくみを理解したいのですが
スキルがあがるステップだと思うので

690:デフォルトの名無しさん
22/06/26 13:35:51.31 VKkh0pnir.net
IEの入力欄に値いれるマクロ使ってたんだけど、エッジに移行して動かなくなったんよ
エッジの入力欄いじる方法ってご存知ないですか?
調べてもよくわからなくて

691:デフォルトの名無しさん
22/06/26 13:39:54.64 PhXCrOZEd.net
VBAを投げ捨ててEdgeの拡張機能を作ろう

692:デフォルトの名無しさん
22/06/26 14:11:21.83 1bCfGQVkd.net
Sendkeys

693:デフォルトの名無しさん
22/06/26 15:05:50.62 WjaufMigd.net
まだInternetExplorer.Application は有効でしょ
サポートは切れたが動かなくなる訳ない

694:デフォルトの名無しさん
22/06/26 15:26:20.76 hFDBYOe90.net
なぜMsedge.Applicationにしないの?

695:デフォルトの名無しさん
22/06/26 15:32:17.63 hFDBYOe90.net
クラス(例:MyClass)が入ってるCollectionの要素(つまりMyClass)をある条件でsortしたいのですが
簡単な方法はないのですよね?
これは標準モジュールにそのソート用のsubかfunctionを書くのが一般的ですか?
「ある条件」というのが複数あるので、複数個それを作るのが面倒。
あといま思い付いたけど、そのCollectionをメンバとして含む親クラスをつくり、その親クラスにその複数のsortに相当するfunctionを作るのがカッコイイです?

696:デフォルトの名無しさん
22/06/26 18:21:23.39 WjaufMigd.net
たぶん用途的にArrayListが良いと思う
>>687

697:デフォルトの名無しさん
22/06/26 21:43:05.30 h799Melv0.net
VBAのマクロ名てなにか制限ある?
Sub n98()
MsgBox "a"
End Sub
というマクロを作ったんだが、実行できない。実行ボタンがグレーアウトする。
しかも、マクロボタンを押すとセルカーソルが彼方に飛ばされるんだが�


698:B https://i.imgur.com/7iCfenT.mp4



699:デフォルトの名無しさん
22/06/26 22:29:47.48 UUS+pyK9H.net
>>689
ワイはそのコードコピペしたらちゃんと動いたよ
モジュールのコード上でF5キー押してみたら?

700:デフォルトの名無しさん
22/06/26 22:31:36.52 UUS+pyK9H.net
マクロ名の制限ももちろんあるよ
ググればすぐ出てくるはず
だけどこのコードのマクロ名は問題無い

701:デフォルトの名無しさん
22/06/26 22:39:05.59 h799Melv0.net
>>690
VBEでF5なら動くが、
エクセル本体で開発タブのマクロボタン押すとああなる。
ちなみにバージョンは2013。
マクロ名が英字2字+数字だと、マクロボタン押すとそのアドレスのセルに飛ばされるな。
もちろんマクロは実行できない。
そんな制限あったけ?
セルのアドレスて「予約語」になるのか?

702:デフォルトの名無しさん
22/06/26 23:12:48.18 47IFcp1V0.net
>>689
excel2010だけど全く同じ現象が起こるわ
F5からじゃくてAlt+F8な

703:デフォルトの名無しさん
22/06/26 23:30:30.80 CNfWwh200.net
この画面開いたらn98セルに行って勝手に選択(コピー?)してくれる
URLリンク(i.imgur.com)
逆に、alt+f8でマクロを開いた状態でセル選択するとテキストボックスに反映されるので、
ここは参照かなにかで連動してるっぽい
URLリンク(i.imgur.com)

704:デフォルトの名無しさん
22/06/27 07:11:11.91 KEClHONvr.net
>>694
予約語とかセル番地名、数字始まりは駄目

705:デフォルトの名無しさん
22/06/27 07:18:40.52 pJh/2YwLH.net
>>695
セル番地もダメだったのか、ウソついてごめんなさい

706:デフォルトの名無しさん
22/06/27 07:20:43.06 kD2T1aicd.net
セル番地名ってダメだったのか

707:デフォルトの名無しさん
22/06/27 07:28:39.14 JHJu1s6G0.net
For each i in collection
 if a=1 then
  if b=1 then
   if c=1 then
    Debug.print "うんこ"
   end if
  end if
 end if
next i
こんな階層はしないほうがいいですか?もしそうならどうすべきですか?
ちなみに実際の条件文はa=1などのように単純ではなくてもっと複雑怪奇で長い文字列です。

708:デフォルトの名無しさん
22/06/27 07:42:09.30 /YUVVdlZD.net
インデント揃えてれば良いんじゃない?
それかある程度深くなったら別ルーチンや関数に飛ばすとか

709:デフォルトの名無しさん
22/06/27 07:44:02.36 cx09ANOo0.net
if a=1 and b=1 and c=1
にすればすっきり

710:デフォルトの名無しさん (スプッッ Sdbf-tCSL)
22/06/27 08:00:18 qwmHCu1Hd.net
>>700
VBAはショートサーキットじゃないから遅くなる

711:デフォルトの名無しさん (ワッチョイ 3f01-DrrO)
22/06/27 08:05:04 3L19Fpz+0.net
>>695
それどこかに書いてある?
まあ予約語や数字始まりがダメなのはわかるけどセルアドレスは盲点だわ

712:デフォルトの名無しさん
22/06/27 09:20:29.88 WYWqaC3Yd.net
>>698
何がしたくてそのIF文を書いてるかわからないけどELSEに対しての記述がなければ>>700みたいな書き方にしてもいいけど
自分はその程度のネストは許容範囲だけどね
それとなんでしないほうがいいと思ったかも書くと他の回答もらえるかもね

713:デフォルトの名無しさん
22/06/27 09:26:36.50 iDqL/u9w0.net
年取ると4階層なんかもう見たくない

714:デフォルトの名無しさん
22/06/27 09:27:26.36 HPVEPi/ad.net
Excel2021でも再現したわ
セル番地はモジュール名にできないのか、知らんかった
捨て変数とか作業ファイル名なんか普通にaaa1とか使ってるから、いつひっかかってもおかしくなかったのに
思い返してみると、なぜか捨てSubはtest1とかmacro1にしてた

715:デフォルトの名無しさん
22/06/27 09:31:15.07 iDqL/u9w0.net
今わかってる範囲では、モジュール名にできるけど挙動が少しおかしくなる
避けられるなら避けたほうが無難だろうね

716:デフォルトの名無しさん
22/06/27 09:34:13.54 Kt0Hv+oPd.net
>>692
英字1文字でも3文字でも飛ばされる
なんかの裏技に使えそうな気がする
遠くのセル範囲をちょっと確認したいとか

717:デフォルトの名無しさん
22/06/27 09:36:09.63 kVADuAyl0.net
>>698
いわゆる早期リターンとかガード節ってやつ
For Each i In Collection
If a <> 1 Then GoTo continue
If b <> 1 Then GoTo continue
If c = 1 Then
Debug.Print "OK"
End If
continue:
Next

718:デフォルトの名無しさん
22/06/27 09:50:33.84 WYWqaC3Yd.net
>>708
自分としてはもともとの判定を変更するような回答はどうかと思ったりするんだよね
複雑怪奇とかいてるのでわかりやすい回答なら「if not (a = 1) then」にしたほうがいいのではないかと
それとそこまで書いたらcの判定もcontinueで飛ばしたほうがすっきりするかと

719:デフォルトの名無しさん
22/06/27 09:53:16.46 H4LNDdnJ0.net
>>707
マクロじゃなくてジャンプでいいってなるんじゃ

720:デフォルトの名無しさん
22/06/27 10:00:09.47 Do3p35pda.net
>>698
内容がわかるようにコメントつければいいんじゃね

721:デフォルトの名無しさん
22/06/27 10:15:26.20 3L19Fpz+0.net
>>705-706
モジュール名にはできないけど>>694のは手続き名だからモジュール名で修飾(※)すれば呼び出せるよ
※ マクロ名の欄に直接 Module1.n98 のように入力する

722:デフォルトの名無しさん
22/06/27 10:19:02.79 iDqL/u9w0.net
>>712
スマン、勘違いしてた

723:デフォルトの名無しさん
22/06/27 10:24:13.47 3L19Fpz+0.net
>>698
一般論としてネストは浅い方が理解しやすいからそのコードであれば>>700>>708みたいにした方が読み易い
ただ>>701が言うようにVBAにはショートサーキット(短絡評価)がないので遅くなるのはいいとしても
If N <= UBound(A) And A(N) = 1 Then ...
みたいなのは
If N <= UBound(A) Then
If A(N) = 1 Then ...
のようにする必要がある

724:デフォルトの名無しさん
22/06/27 10:29:53.48 kVADuAyl0.net
まあ、複雑な判定するならメソッドに切り出すのが間違いないわな
VBEだとIDEのサポートないから若干めんどくさいけど

725:デフォルトの名無しさん
22/06/27 11:00:14.42 tRNW+/P90.net
>>698
賛否あると思うが
For Each i In Collection: Do
 If a <> 1 Then Exit Do
 If b <> 1 Then Exit Do
 If c <> 1 Then Exit Do
 Debug.Print "OK"
Loop: Next
みたいな書き方もある

726:デフォルトの名無しさん
22/06/27 11:01:13.33 tRNW+/P90.net
最後の行間違えた
Loop Until 1: Next

727:デフォルトの名無しさん
22/06/27 11:05:37.12 zkyvRAcfa.net
あんまりにもネストするなら、判定文(if複数)だけ別プロシージャ(Function)として外出しして、TrueかFalseを返させるようにするかな
IsGoukaku みたいなプロシージャ名にすると何したいかがわかってメンテ楽だし

728:デフォルトの名無しさん
22/06/27 11:29:16.42 gUdOjGv30.net
セル番地がダメならダメでいいけど、あんな挙動をするのはバグだよ。
本来はメッセージだして弾くべきじゃね?
office365でも同じならだれかMSにチクってみてくれ。
以前、MSの掲示板にWinの不具合を書いたら、
速攻で消されたが、
こっちでも確認できたから開発にレポしといたていうメールが来て感動したわ。

729:デフォルトの名無しさん
22/06/27 11:31:14.56 iDqL/u9w0.net
>>719
365でも同じだよ

730:デフォルトの名無しさん
22/06/27 11:34:53.87 gUdOjGv30.net
>>700
if a=1 and b=1 and c=1
にすると内部では判断を3回することになる。
if a=1 then
if b=1 then
if c=1 then
にすると判断は少なくなるのだから、ネストするほうが正解じゃね?
もちろん、ifを書く順番は判定が少なくするようにする必要はあるが。

731:デフォルトの名無しさん
22/06/27 11:48:23.44 Fr547gX6r.net
>>719
ゆうてVBAとかアプデすんの?

732:デフォルトの名無しさん
22/06/27 11:52:04.31 iDqL/u9w0.net
してるよ

733:デフォルトの名無しさん
22/06/27 11:52:52.11 nfvw1vkN0.net
セキュリティ以外で?

734:デフォルトの名無しさん
22/06/27 11:57:18.86 iDqL/u9w0.net
うん

735:デフォルトの名無しさん
22/06/27 11:59:27.42 iDqL/u9w0.net
頻度はwindoewsやエクセルに比べたらかなり低いけど、やってるよ
確かちょっとずつ便利になってる。本当にちょっとだけ。関数が増えたりはしていないはず。
ソース探したけど見つからねぇ

736:デフォルトの名無しさん
22/06/27 12:02:08.29 nfvw1vkN0.net
ふーん。。
まあ元号はあったね。。
古臭いよね。。

737:デフォルトの名無しさん
22/06/27 12:04:52.44 nfvw1vkN0.net
言語仕様っぽいページはあった
URLリンク(docs.microsoft.com)
結局代替がないからなあ

738:デフォルトの名無しさん
22/06/27 13:50:25.11 FDoLWwM/d.net
>>718
俺も大体これでやってる

739:デフォルトの名無しさん
22/06/27 19:05:07.99 IOT9Z53O0.net
>>698
そもそもi使ってねーじゃん

740:デフォルトの名無しさん
22/06/27 19:57:12.47 UdQiWAN30.net
どなたか教えてください。
売掛金消し込みのマクロを作成しています。VBAでソルバーを自動化したいと思っています。
目的セル、制約条件の参照セルの開始行が40行ごとに下がっていき、指定値は数値ではなく、セルを指定したいです。
とりあえず、全部の変数をvariant型にしてますが、なかなか上手くいきません。

741:デフォルトの名無しさん
22/06/27 20:18:45.52 UdQiWAN30.net
731です。
sub ソルバー()
dim 振込1 as variant
振込1=worksheets("ソルバー").range("n2:n8")
solverok setcell:= worksheets("ソルバー").range("i3"),
maxminval:=3,
valueof:=振込1,
bychange:=worksheets("ソルバー").range("e2:e40"),
enginedesc:="grg nonliner"

solveradd celreff:=worksheets("ソルバー").range("e2:e40"),relation:=4
solversolve userfinish=true

742:デフォルトの名無しさん
22/06/27 20:22:23.17 jYXkLZ/o0.net
で、何がうまくいかないの?

743:デフォルトの名無しさん
22/06/27 20:26:50.30 UdQiWAN30.net
>>733
ソルバーを実行しても、目的セルが0のままで指定値にと一致する金額の組み合わせが見つかりません。
どの請求分の入金なのか、突合したいです。

744:デフォルトの名無しさん
22/06/27 20:35:36.69 9IVJ+eiIa.net
>>734
ソルバーわからんから確認させてください
振込1って変数は配列に入れた値を指定したいものですか?それともセル自体を指定したいものですか?
前者であればそれでいいですが、後者なら変数はRange型にする上で代入時に
Set 振込1 =〇〇
としないといけませんが…

745:デフォルトの名無しさん
22/06/27 20:37:19.75 UdQiWAN30.net
連投すみません。
変数宣言して、for〜next構文でe列を("e"&i+40)や、n列も("n"&i+40)みたいにしたいんです。
d列には請求金額、e列は空白、目的セルにはsumproduct関数が入ってます。
指定値セルはn2:n8で、それぞれ違う金額が入力されてます。入金額とn2:n8内の金額が一致する組み合わせの請求金額をVBAを使って、求めたいです。

746:デフォルトの名無しさん
22/06/27 20:39:44.13 UdQiWAN30.net
>>735
ありがとうございます。
ヘルプを確認したら、指定値はバリアント型で書けとあったので、なんとなくvariantにしていました。

747:デフォルトの名無しさん
22/06/27 20:45:55.27 qw9z/asOd.net
>>737
マルチ死ね

748:デフォルトの名無しさん
22/06/27 20:58:49.57 jYXkLZ/o0.net
とりあえず、rangeで回すんじゃなくてcellsで回したら?
n列はcells(i,14)
e列はcells(i,5)で

749:デフォルトの名無しさん
22/06/27 21:09:33.28 UdQiWAN30.net
>>739
sub または functionが定義されませんエラーが出ます…

750:デフォルトの名無しさん
22/06/27 21:10:43.06 UdQiWAN30.net
>>739
cellsも以前試したんですが、上手いこといきませんでした

751:デフォルトの名無しさん
22/06/27 23:45:06.09 8dHt2RWvM.net
こんな奴が作るプログラムで金勘定とか笑えるわ
己を知らないって馬鹿の特徴なんだよな

752:デフォルトの名無しさん
22/06/28 00:04:39.14 41/DPGawd.net
ソルバーってカタカナで書くの余計分からないよ
素直にSolverで良いだろうに
上の困ってるのは一旦マクロの記録で動作確認お薦め

753:デフォルトの名無しさん
22/06/28 00:07:49.75 bUNh/khy0.net
>>742
2行目はよく解る www

754:デフォルトの名無しさん
22/06/28 05:51:37.94 kKObdKOQ0.net
オレオレ詐欺の手伝い?

755:デフォルトの名無しさん
22/06/28 07:36:23.45 XbsSoqMza.net
>>736
なんで会計ソフト使わないの?

756:デフォルトの名無しさん
22/06/28 07:54:25.17 2SIMEAUf0.net
Excelは万能ではないから会計ソフトでやるべき事柄

757:デフォルトの名無しさん
22/06/28 08:48:25.11 8yuWSL180.net
この世で最高のコードを見かけた
With Range("F27:F56")
.Value = .Value
End With

758:デフォルトの名無しさん
22/06/28 09:10:04.94 3ZxXgE6I0.net
>>748
それの意味解る?
ちょっと前に同じ様なコード載せてた人いたけど
複数範囲は一度に設定できないって嘆いていたよ

759:デフォルトの名無しさん
22/06/28 09:10:36.27 a//tJk240.net
>>732
solverを使うときのパラメーターの設定の方法が間違ってんじゃない。多分値渡しではなくsetを使うと思うよ。
まずマクロの記録もう使ってなんでもいいからsolverで問題を解いてみて、solverを使うときの正しいVBA の書き方を確認しなさい。

760:デフォルトの名無しさん
22/06/28 09:52:29.46 qOxYqvDuM.net
>>698
Ifなんたらかんたらを使わないで
B2になんか文字が入っていたらC2を
B3になんか文字が入っていたらC3を…
をスマートに書くならどう書きます?
URLリンク(i.imgur.com)

761:デフォルトの名無しさん
22/06/28 11:02:29.10 1UWi0IGcd.net
>>751
こんな質問してマウントとりたいんだろうか・・・
こんな質問するならそのスマートな回答も書いておけばいいのに

762:デフォルトの名無しさん
22/06/28 11:15:10.25 cqDrGvOU0.net
VBA使わなくてもセルに関数書いときゃいいんじゃね

763:デフォルトの名無しさん
22/06/28 12:14:32.96 S7aFTH1NM.net
>>751
お前Access VBAスレにExcelの質問書き込みするんじゃねーよ
迷惑だ

764:デフォルトの名無しさん
22/06/28 17:20:05.57 mlWlUbMB0.net
すみません、神様達、教えてください
エクセルVBAでは
関数内関数はどうやって作れますか?
また複数の関数を目的別に整理する方法として
パッケージやモジュール単位にまとめたり
マップに収納したりはできるのでしょうか?

765:デフォルトの名無しさん
22/06/28 17:52:33.73 fjXXNeRNM.net
>>755
できる
vbeエディタウインドウを凝視しているとやり方が判るはず

766:デフォルトの名無しさん
22/06/28 17:59:52.62 8yuWSL180.net
>>756
具体的にやり方を教えてあげなよ

767:デフォルトの名無しさん
22/06/28 18:51:45.14 gpLDnVSMr.net
>>755
関数内関数ってこれのこと?
URLリンク(www.sejuku.net)

768:デフォルトの名無しさん
22/06/28 19:15:28.84 +0CREnk7H.net
>>756
ちょっと凝視してみます
>>758
疑似コードですけど例えば、
Function out()
 Function in1()
 End Function
Dim a=Function in2()
End Function
out=Array(in1,a)
End Function
みたいな感じで
関数outの中に関数in1を宣言したり
変数に関数を代入して、returnしたりしたいのです

769:デフォルトの名無しさん
22/06/28 19:22:25.73 EFCYXnQm0.net
ローカル関数もサポートされてないし
関数をオブジェクトとして扱えないので変数への代入も無理です

770:デフォルトの名無しさん
22/06/28 19:22:27.90 +0CREnk7H.net
>>756
標準モジュール単位で関数をまとめればいいってことでしょうか?

771:デフォルトの名無しさん
22/06/28 19:29:24.91 +0CREnk7H.net
>>760
ありがとうございます
なるほどです
すっきりしました、神様ありがとう
モジュールを使いながら関数を整理するか
関数用にファイルを作って管理するかします

772:デフォルトの名無しさん
22/06/28 20:14:33.61 a//tJk240.net
>>761
正解です

773:デフォルトの名無しさん
22/06/28 20:14:53.99 a//tJk240.net
それからモジュールには適当に名前を付けることができますので

774:デフォルトの名無しさん
22/06/28 20:17:06.37 8yuWSL180.net
関数内関数ってのは、関数の中で定義する関数のこと
phpだと
sub foo1
if a = b then
 sub foo2
  foo2=1
 end sub
else if
 sub foo2
  foo2=2
 end sub
end sub
みたいなことができる
あんまやらんけど

775:デフォルトの名無しさん
22/06/28 20:22:34.06 a//tJk240.net
>>759
関数内関数をそこで書いているようなやり方ではできないけれど、どうしてもやりたければ vbe オブジェクトを定義してそこにコードを書き込むという疑似なやり方はできる。あるいはコードを作成するプロシージャを作成してそのプロシージャを呼び出して引数を渡してコード作った後、そのコードを呼び出すみたいなことはできるのかもしれない。
コードを実行中に別のコードを作成するという経験がないんでエラーが出るかどうかは分からない。
ただ面倒だし見通しも悪くなるんで外側で関数を定義した方が簡単だと思うんだけれどなぜ関数の中で関数を定義したいのでしょうか。

776:デフォルトの名無しさん
22/06/28 20:32:39.05 +0CREnk7H.net
>>766
ありがとうございます
vbaがエクセル前提の言語と考えると
私が考えているような関数は使うべきでもないのだなって思いました
神様たちのアドバイスに感謝です
ありがとうございました

777:デフォルトの名無しさん
22/06/28 20:42:12.06 +0CREnk7H.net
>>765
ありがとうございます

778:デフォルトの名無しさん
22/06/28 20:50:26.07 +0CREnk7H.net
>>766
なぜ関数の中で関数を定義したいのか
すべての関数を同列に記載すると見通しが悪い気がして
例えば数式に関するものなら、calcurationでまとめ
出力に関するものなら、printでまとめ
保存に関するものなら、saveでまとめ
っていうように、目的別、機能別、階層別に関数をまとめると
後で見直したときに分かりやすいかなって
さらにfacadeみたいに間口を作れば
拡張も修正もしやすいかなって思いまして

779:デフォルトの名無しさん
22/06/28 20:56:44.33 8yuWSL180.net
>>755
>関数内関数はどうやって作れますか?
関数内関数はない
classは貧弱だけど、ある
ただvbaそもそもの概念として、エクセルのスクリプトであるという点がある
あんまり大きなclass作りたいなら、別言語の方が良いと思う
エクセルvbaはゲームとかもキツイ(メインloopが超貧弱でvbaを起動しっぱなしだとよく落ちる)
>また複数の関数を目的別に整理する方法として
>パッケージやモジュール単位にまとめたり
>マップに収納したりはできるのでしょうか?
標準モジュール単位でまとめられるけど・・・
エクセルvbaの標準モジュールは「どのシートにも共通する処理」のような意味合いで用いられる
よくも悪くも、vbaはエクセルのためにあるので
あまり壮大な事をするのには向いていない

780:デフォルトの名無しさん
22/06/28 20:59:53.87 +0CREnk7H.net
>>770
class調べてみます!
モジュールとclassが使えれば
見やすいコードかけるかも!
そんな壮大なプログラムを作るつもりなないのですけど
一処理、一関数にしたいとなると
ある程度の単位で処理をまとめていきたいなって
ご丁寧なご解説に感謝です
ありがとう、神様!

781:デフォルトの名無しさん (ワッチョイ ff02-tQxS)
22/06/28 21:13:22 i28fB/zi0.net
>>750
アドバイスありがとうございます!

入金消し込みの自動化をせよと上司からの指示で、初心者なりになんとかやってるんですが、会計ソフトの会社でもお手上げな仕組みの売掛金管理のようです。

setとcellsでなんとか、試行錯誤してやってみようと思います!

またわからなくなったら、質問させて頂きます。

782:デフォルトの名無しさん (アウアウウー Sad3-/ybv)
22/06/28 21:26:40 WQvDBuzoa.net
十年近くぶりに触るし上級者だったとかじゃないけど
VBAで
今開いてるPhotoshopの選択しているレイヤーを基準にExcelの指定セル範囲(例:A1からA20)を1セルごとにレイヤーを1枚作りセルの中身を文字ツール(テキスト)でレイヤーを作成。
例:ExcelのA1に「あいう」、A2に「えお」、A3に「123」が入力されていたとし、指定範囲選択(A1〜A3)を、開いてるPhotoshopにレイヤー追加しながらテキストレイヤー「あいう」、「えお」、「123」を作る(計3枚)。その際、Excelに近い見た目の形で…この場合、横に少し間隔を空けて「あいう」「えお」「123」が並ぶように作成する。(文字の大きさや色は直前に使ったpxサイズ、色とする)
って出来ますか?

783:デフォルトの名無しさん (ワッチョイ 3f4f-60CD)
22/06/28 21:45:50 3ZxXgE6I0.net
いや、関数内関数?
まぁ似たようなものはあるよ。
GOSUBってのが。

ただ、これも負の遺産のひとつだから
あまり使うことはお勧め出来ないけど。

784:デフォルトの名無しさん
22/06/28 21:52:47.26 /U22FX/80.net
gosubは全然違うでしょ

785:デフォルトの名無しさん
22/06/28 22:11:43.10 GB8Zx7jKM.net
関数内関数いわゆる高階関数について、VBA関数には高階関数のための機能は無いけどワークシート関数のLAMBDAが該当する

786:デフォルトの名無しさん
22/06/28 22:18:47.50 8yuWSL180.net
確かに!その発想は正解だが・・・だが・・・

787:デフォルトの名無しさん
22/06/28 23:36:42.40 EFCYXnQm0.net
>>773
COM経由で操作できるっぽい。こんなのが引っかかった
URLリンク(minatoya.work)

788:デフォルトの名無しさん
22/06/29 07:26:36.96 f9LCV9hba.net
>>776
お前名前に騙されやすいタイプだろw
LAMBDA は単なる関数定義で VBA スレ的にはユーザー定義関数と変わらんぞ
ユーザー定義関数はマクロブックにしか入れられないから LAMBDA が作られた

789:デフォルトの名無しさん (ワッチョイ 7fda-eqyh)
22/06/29 08:15:54 SMNkprrA0.net
他のプログラミングと同じだと思われているのかな LAMBDA 関数は

790:デフォルトの名無しさん
22/06/29 08:48:09.67 sZpGYWcf0.net
ユーザー定義関数では(コーディング時に)関数を自作することはできるが、(実行中に)関数内で関数を定義したり
(実行中の)関数の引数に関数そのものを与えるたりすることはできない
そもそもユーザー定義関数とLAMBDA関数はまったく別のもの
Excelの新関数「LAMBDA」(ラムダ)が一般提供開始 ~Excel数式が本格的なプログラミング言語に
URLリンク(forest.watch.impress.co.jp)

791:デフォルトの名無しさん
22/06/29 08:51:20.38 GuRBEGnka.net
>>778
ありがとう
そこのページ起点に頑張ってみる

792:デフォルトの名無しさん
22/06/29 08:55:02.95 8rr9zLPCM.net
関数型パラダイムをサポートしている言語か、最低でもC言語などで関数ポインタを使ったことがある人でないと高階関数の概念は理解が難しい

793:デフォルトの名無しさん
22/06/29 10:34:47.30 7c8LgVFIa.net
privateで良くないか

794:デフォルトの名無しさん
22/06/29 12:27:16.10 f9LCV9hba.net
>>781
高階関数の話ならそこに書いてあるMAPとかSCANがLAMBDAを受けられる様になったことを言うべき
あと関数内関数と高階関数は全く別物だし実行中に定義できるか


795:かどうかも関係がない



796:デフォルトの名無しさん
22/06/29 13:48:20.01 Es0nfTu8a.net
記者がアホなんやで

797:デフォルトの名無しさん
22/06/29 14:05:01.02 SMNkprrA0.net
ネットの記事って怪しかったり間違っているのが多々あるよね

798:デフォルトの名無しさん
22/06/29 14:22:16.06 3IrndTU40.net
ネットの記事だけがそうだと思ってる?

799:デフォルトの名無しさん
22/06/29 14:30:17.44 par7A0IW0.net
はい次の方

800:デフォルトの名無しさん
22/06/29 14:59:30.13 0RCF24VI0.net
.Netでもひとつの壁と言われているラムダ式が
VBAどころかEXCELで使えるようになるのか。
胸熱だが脱落者も増えるだろうな。

801:デフォルトの名無しさん
22/06/29 15:07:56.16 Ajq9RLSRM.net
一般的な意味での高階関数は数学的な抽象概念としての話ではあるけど、プログラム言語としては第一級関数の実装のことを言う場合が多い
(C言語の関数ポインタのように擬似的に実現する方法もある)
高階関数
URLリンク(ja.wikipedia.org)
第一級関数
URLリンク(ja.wikipedia.org)

802:デフォルトの名無しさん
22/06/29 15:09:05.56 JurptZkT0.net
脱落者なんて増えないさ
世の中にエクセルの全機能使いこなしてる奴なんていないからな
理解できない機能は使われないだけだよ

803:デフォルトの名無しさん
22/06/29 17:35:51.56 0RCF24VI0.net
>>791
読んでてよく分からんかったけど
要はアセンブラでいうところのアドレスの間接参照とか
間接修飾とか言われているやつで
.NetではDelegate、VBAではCallByNameによるコールバックって理解でいい?

804:デフォルトの名無しさん
22/06/29 17:43:32.68 8wQcCZ0gd.net
VBAでできない事をダラダラと話さず別スレいけばいいのに

805:デフォルトの名無しさん
22/06/29 17:56:17.53 vfJ3sAv3M.net
Excelで例えるなら関数を特定のオブジェクトのメソッドとしてではなく、それ自体を実体のあるオブジェクト(あるいはコレクション)と見做すようなもの
利用側の関数内で関数オブジェクト(のようなもの)を参照する手段として関数そのものをラムダとして扱う


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch