[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 12/16 07:47 / Filesize : 287 KB / Number-of Response : 1010
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part74



1 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 01:40:59.22 ID:jnlr9GaR0.net]
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part73
https://mevius.5ch.net/test/read.cgi/tech/1631485799/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

696 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 13:10:14.89 ID:q0HuFlPw0.net]
ちゃんと単体結合テストやるところの場合だと
処理毎に、Function に分けるのが吉。

697 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 14:42:22.30 ID:ip0aOcF2M.net]
みんな試行錯誤してきたのがよくわかる

698 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 16:16:07.18 ID:RGV8ouxS0.net]
Excel全般て本当に努力しないと使えないってのはウソじゃないですな

699 名前:デフォルトの名無しさん [2022/01/26(水) 16:21:39.28 ID:ykAsNY55r.net]
Excel VBAビギナーの頃
5000万の案件をやり遂げた事あるけど
VBの入り口としては良いよね。

昔はVBAを入り口に、VB6.0 に移行できたから
良かったんだがな。

700 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 18:39:36.99 ID:WAP1y4aa0.net]
>>623
まぁ他言語をやってない奴の意見なんてそんなもんだろな。
VBAで使えるものもあれば使えないものもある。

テンプレートメソッドパターンなんかは使えないけどストラテジーパターンなんかは使える。

そういうの使った際に分岐が減るからUT楽になるかなー、とか、それ使う程の規模かなー、とか
楽な方を選べるってことだよ。

701 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 18:53:39.06 ID:YVr9NW6iM.net]
>>695
> ストラテジーパターンなんかは使える。
無理じゃね?

702 名前:デフォルトの名無しさん [2022/01/26(水) 19:15:39.62 ID:xR2ItXtPM.net]
グローバルしかない古代BASICに比べれば天国じゃよ

703 名前:676 mailto:sage [2022/01/26(水) 20:11:08.97 ID:+JbM4Kut0.net]
みんなやっぱ困ってるお題なんだなこれ。反応ありがとう。

俺は

Function Func(Args)

 Func = TestArguments( Args ) // ←このへんは異論出るかもだけど、内部関数で引数テストはありだと思う。

 If Func <> Normal Then
  Exit Function
 EndIf

 Call 長〜い処理1をファンクションにしたもの
 Call 長〜い処理2をファンクションにしたもの
 Call 長〜い処理3をファンクションにしたもの

End Function

てな感じをイメージしてた。VBAの文法的にはむちゃくちゃかもだけど、最近書いてないのでそこは許してw

C風に

If ( (Func = TestArguments(Args))<>Normal ) Then て書けるのかな。

704 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 20:33:27.76 ID:Rwt/NS3J0.net]
エラーとしてまとめるってのを昔見たことあるけど、見づらいかなぁ

Sub Func()
On Error GoTo err

flg = True

If flg Then
err.Raise Number:=513, Description:="内容"
End If

' Call 長〜い処理1をファンクションにしたもの
' Call 長〜い処理2をファンクションにしたもの
' Call 長〜い処理3をファンクションにしたもの
Exit Sub

'エラー処理
err:
MsgBox err.Number & vbCrLf & err.Description
End Sub



705 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 20:50:31.29 ID:8zLJqphFM.net]
>>698
> C風に
> If ( (Func = TestArguments(Args))<>Normal ) Then て書けるのかな。
書けるけど君の思ったようには動かない、例えば
Work = (Func = TestArguments(Args))
は TestArguments() の戻り値が Func と同じなら True、違うなら False が Work に入るから、それと Normal を比較することになる
※ 実際には Func は再帰呼出しとなるが引数が指定されてないのでエラーになる

706 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 21:48:41.76 ID:+JbM4Kut0.net]
>>700
なる。ありがとう。

707 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 01:44:43.12 ID:f6ffcYr70.net]
>>699
わざわざエラーとかせずに、普通にGOTOで飛ばせばいい

局所的にGOTO使っても可読性は落ちないし、むしろわかりやすいと思ってる

708 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 02:13:33.38 ID:iz7yjT+P0.net]
後藤使うのは素人

709 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 07:25:42.82 ID:EosWc+uxM.net]
>>702
Raise ならエラー情報(番号とメッセージ)を伝えられると言うメリットがあるな

710 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 09:17:43.26 ID:ISwrtggt0.net]
>>702>>704
そう、この場合のメリットは>>704の通り
そして他のエラーもまとめることができるのでシンプルになる

>>703
この場合はgotoかエラー以外ない

711 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 09:49:42.96 ID:jZ2PQbyQ0.net]
>>696
何故そう思う?

712 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 10:10:14.97 ID:pNJphUuoM.net]
>>706
CallByName() とかを使ってやってやれなくは無いけど無理矢理感あるしな

Strategyパターンはアルゴリズムを記述するサブルーチンへの参照をデータ構造の内部に保持する。
このパターンの実現には、関数ポインタや関数オブジェクト、デリゲートのほか、オーソドックスなオブジェクト指向言語におけるポリモーフィズムと委譲、あるいはリフレクションによる動的ダック・タイピングなどが利用される。

VBAにもまともな関数ポインタがあればね…

713 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 10:41:53.58 ID:jZ2PQbyQ0.net]
>>707
そもそもクラスで普通に移譲が出来るんだから
出来るとは思わないか?
もっとも、継承が使えないので
Is a関係だろうがhas a関係だろうが
移譲に頼ることになるだろうけど。

714 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 11:20:16.68 ID:NmFY0FMsM.net]
>>708
ああ、インターフェースはあるから移譲はできるか



715 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 12:29:10.84 ID:iz7yjT+P0.net]
シンプル・イズ・ベスト。
スティーブ・ジョブズの信条でもあった。

凡才は複雑を好み、天才はシンプルを好む。

716 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 00:04:37.97 ID:sv+QVprG0.net]
WorkSheetのEventで、
テーブルのフィルタソート機能(昇順or降順)をユーザが使ったときのEvent
ってできるんでしょうか?
最悪、"フィルタ機能を使った"時点でも取得できれば。。。

717 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 00:19:09.31 ID:6Z68BDtw0.net]
>>711
ない

718 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 03:12:47.26 ID:sv+QVprG0.net]
>>712
まじですか、、、ありがとうございました。

719 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 12:32:58.97 ID:EweXC9jR0.net]
すんません、膨大なデータ量の集計を任されて困ってます。
例えばA1セルに
「1.5G」とあるものは
Gを取った上で1024を3乗し、B1に表示
「256M」とあるものは
Mを取った上で1024を2乗し、B1に表示
「504K」とあるものは
Kを取った上で1024を掛け、B1に表示
みたいな便利なことができる関数があれば教えて頂きたく。
SUBSTITUTEで文字を取ったりVALUEで数字だけ抜き出したりしてみても、そこに条件判定を組み込むことが出来なくて…。

720 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 13:00:06.93 ID:6Z68BDtw0.net]
>>714
Excelのバージョン書いて

721 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 13:09:05.83 ID:tnq08GUKM.net]
>>714
あんまりスッキリした方法じゃないけど、単位ごとに処理を分けて並べるぐらいしかないのでは
式はもうちょっと整理できると思うけど、とりあえず動くやつ
=IF(RIGHT(A1,1)="G",LEFT(A1,LEN(A1)-1)*1024^3,IF(RIGHT(A1,1)="M",LEFT(A1,LEN(A1)-1)*1024^2,IF(RIGHT(A1,1)="K",LEFT(A1,LEN(A1)-1)*1024,A1)))

722 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 13:43:11.42 ID:EweXC9jR0.net]
>>715
Microsoft 365 MSO(16.0.13801.21004)
>>716
本当にありがとう、助かります。

723 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 13:54:48.79 ID:SUVzbVrJ0.net]
powerとfindで考えてたけど、あんまり変わらんかった

724 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 14:06:54.61 ID:54qKpcGwM.net]
>>717
365 なら
=SWITCH(RIGHT(A1, 1), "G", 1024^3, "M", 1024^2, "K", 1024) * LEFT(A1, LEN(A1) - 1)
ただし、最後が GMK でなかった時はエラーになるのでその場合はIFERROR()で回避かな



725 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 14:10:37.46 ID:pNi2eyZM0.net]
集計なら式使わずに素直にVBAで処理すれば?

726 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:01:21.24 ID:EweXC9jR0.net]
>>719
ありがとう、それも問題なくいけました。

727 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:16:30.86 ID:6Z68BDtw0.net]
>>721
1K未満の単位の付かない数値に対応したやつ
=LET(u,RIGHT(A1,1),p,SEARCH(u,"kmg"),IFERROR(LEFT(A1,LEN(A1)-1)*1024^p,A1))

728 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:34:49.10 ID:EweXC9jR0.net]
色々ありがとう。使わせていただきます。

729 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:00:55.15 ID:Pw9WEPs80.net]
>>723
スピードを求めるならVBAでやった方がいい。
基本、VBAよりCELLに入れた数式の方が計算早いけど、
値を設定するたび再計算が走るのでは当然遅くなる。

単位をRightの1文字切り取って使うかInStrRevで1文字切り取って使うかは自由だし、
数値部分も最後のひと文字を抜いて数値変換する方法はどうにでもなるはずだから、
後は切り取った単位で冪乗計算の乗数を変えてあげれば簡単に行けるはず。

730 名前:デフォルトの名無しさん [2022/01/28(金) 16:07:42.05 ID:eEIZm5jJ0.net]
膨大な行数になるようなら
関数よりマクロの方が断然軽い。

マクロの記録で瞬間でできるし。

731 名前:デフォルトの名無しさん [2022/01/28(金) 16:08:26.59 ID:eEIZm5jJ0.net]
記述すら必要なし。

732 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:30:28.61 ID:vX0FG/YWd.net]
マクロの記録で瞬間て、どうやるの?

733 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:31:33.84 ID:MK2zcruJ0.net]
一瞬で

734 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:35:47.36 ID:sJpZ8snBM.net]
この程度なら関数の方が速いと思うぞ
マルチスレッドで動くし
再計算も変化したセルに関連するところしかやらないから問題にはならないと思う



735 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:36:25.47 ID:u6dzd5iJd.net]
ここはVBAスレだから質問はスレチだけどみんな優しいね

736 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:49:38.97 ID:qJef3P+M0.net]
>>730
はて?

「Excel VBA 質問スレ Part74」
とあるが?

737 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:57:01.02 ID:sJpZ8snBM.net]
> ここはVBAスレだから(計算式の)質問はスレチだけどみんな優しいね

738 名前:デフォルトの名無しさん [2022/01/28(金) 18:14:34.37 ID:ZcQb+fCA0.net]
>>714
こんな奴に作業を任せるとかそもそも間違えている

739 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 18:21:53.88 ID:np+yf06a0.net]
今のエクセルの計算式は基本マルチスレッドでやるから、VBAでちまちまやるよりは早いだろうけど
このスレ的にはVBAで関数作るんが正解じゃないかと思った

で、ふと思ったが、VBAの関数をワークシートの計算式で使ったら、シングルスレッドで処理されるのかな

740 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 18:58:00.84 ID:Qmj8/oz70.net]
>>711
どうしても「そのテーブルのフィルタソート機能を使用した」時点を起点に処理を始めなければならないとすれば、
Worksheet_SelectionChangeで、その特定のテーブルの特定の列を走査して昇順または降順にデータが並んでいれば「フィルタソート機能を使った」と判定する、ぐらいしか思いつかない
たまたまソートする前にデータが整列してしまっていた場合や処理が完了した後に再度処理が走ってしまうので、どこかにフラグを作って管理する必要もあると思うけど
あと、ソートする列に数値と文字列やブール値などが混在している場合も判定に注意が必要かと思う

741 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:12:04.41 ID:SUVzbVrJ0.net]
>>730>>732
vbaより数式や標準機能が簡単なら、そっちで回答するだけだよ
「excel&vba」なのか「eccel|vba」かは解釈次第だが、俺は後者だと思う

742 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:24:01.89 ID:qlKzmgV90.net]
7時30分から30分ずつ加算した時刻をコンボボックスに入れるやり方をおしえてください

For i = 1 To 19
UserForm1.ComboBox5.AddItem Format(DateAdd("n", 30, "7:30"), "h:mm")
Next i

743 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:35:31.95 ID:sJpZ8snBM.net]
>>734
> で、ふと思ったが、VBAの関数をワークシートの計算式で使ったら、シングルスレッドで処理されるのかな
ドキュメントは見たことないけどVBA部分はシングルだろうと思う
マルチで走るとグローバル変数で競合したとき困るし

744 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:40:10.55 ID:GYI6WCqI0.net]
VBA専用だけどExcel全般もOK
Excel板と仲悪い理由だけは分かった。



745 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:41:52.43 ID:sJpZ8snBM.net]
>>737
Dim T As Date
T = TimeSerial(7, 30, 0)
For i = 1 To 19
UserForm1.ComboBox5.AddItem Format(T, "h:mm")
T = DateAdd("n", 30, T)
Next i

746 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:55:14.07 ID:PEhFKy76d.net]
power queryと変数定義関数で、VBA使わずともかなりのことができるようになったよね
ローコードツールみたいだなと思う

747 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 20:01:26.98 ID:XaG/+jlyM.net]
>>735
> Worksheet_SelectionChangeで、その特定のテーブルの特定の列を走査して昇順または降順にデータが並んでいれば「フィルタソート機能を使った」と判定する、ぐらいしか思いつかない
そんなことしなくてもWorkSheet.AutoFilterMode見て、WorkSheet.AutoFilter見たらいいだけ

748 名前:737 mailto:sage [2022/01/28(金) 20:13:02.61 ID:qlKzmgV90.net]
>>740
ありがとうございます

749 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 21:49:05.63 ID:Qmj8/oz70.net]
>>742
テーブルらしいので、WorksheetじゃなくてListObjectを見ないと判別できない
あと少なくとも自分には、AutoFilterにはフィルタソートをかけたかどうかを判別できるものが見つけられなかった
(フィルタソートしてもAutoFilter.FilterModeはFalse)
もし環境で動作が異なるのならごめんなさい

750 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 22:21:03.74 ID:0dNIFpO5M.net]
>>744
> テーブルらしいので、WorksheetじゃなくてListObjectを見ないと判別できない
ああ、そりゃすまん

> あと少なくとも自分には、AutoFilterにはフィルタソートをかけたかどうかを判別できるものが見つけられなかった
手元に環境ないから試せないけど
ListObjects(...).AutoFilter.Filters(...).On
じゃねーの?

751 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 00:40:00.86 ID:d67hOlZf0.net]
図書館に「はじめてのPower Automate Desktop」ていう本があったので借りてみたんだけどよ。
VBAでは10-20行ぐらいのエクセルの処理を、40ページぐらいかけて説明してたわ。
やってることは、VBAでやるコマンドをGUI操作でやってるような感じ。
どう考えても、VBAより簡単とは思えんしむしろVBAのほうが簡単じゃねーの?

752 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 02:38:30.78 ID:wvbeuCX/d.net]
>>746
馬鹿には違いがわからんだけだろ

753 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 06:07:15.34 ID:S/AYuT160.net]
AWS など、Linux は逆。
GUIを排除して、コード化する。IaC(Infrastructure as Code)

AWSのGUIで設定したら、人によって間違うから、
どのボタンを押すなど、ソースコードで書いて、Terraform で実行する

これなら、Terraformのコードをサーバーへ転送して、実行するだけで環境構築できる

754 名前:デフォルトの名無しさん [2022/01/29(土) 06:12:15.60 ID:nI5CwbIZ0.net]
いや…VBA (VB6)を作った人は、相当優秀やな

昔、VB6 でフリーウェア作ったり、楽しかったわ…



755 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 07:43:57.70 ID:p3H2eYK50.net]
>>746
まあ、コードがわからん人(わからん人が使えるとは言ってない)向けだからな。
会社で色々ガチガチに制限されてるけど、そこだけはオッケーとかだったら使うしかないじゃない?そういう人向けだと思うよ。

Power Automateはまだサーバーが勝手に動いてくれるからマシだけど、Desktopはホント用途がわからん。

756 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 07:56:58.17 ID:u7cBLx/b0.net]
他言語のプログラマーからは下に見られるVBA
なぜ差別される?

757 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 08:31:49.58 ID:vQXkhP0VM.net]
中途半端に自分の知識を誇示して周囲を見下すやつが多いから
職場や上司を叩いて自己満足に浸るレスがこのスレでも目立つ

758 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 08:56:48.05 ID:mMYfjebB0.net]
起動しているedgeやIEで開いているページから文字を取り出したいのですがどうしたらいいでしょうか?

もしくは起動しているページからワンクリックで文字を取り出しExcelに貼り付ける様な方法はありますか?

759 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 09:01:58.47 ID:p3H2eYK50.net]
RPAみたいに世間の認知も高いわけじゃない、
プログラムほど難しいことやってるように見えない、
そのくせ仕事は手抜きしてるように見える、
聞いてもよく分からないことしか言わない、

知らない人からみたらこんな感じだからじゃない?

760 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 09:41:15.24 ID:D0pOsND50.net]
>>751
理由は色々あると思う。
名前がVisual Basic for Applications というくらいEXCELとかACCESSとかのMicrosoft Officeに特化していて
実際のシステムを構築するのには不向きであること。

間口が広いので初心者向きでもあり、それが逆にどんな人でもちょっと勉強すれば組めてしまうイメージがあること。

フレームワークの知識が皆無でも普通に組めてしまうこと。

VB.Netですら消えかかってるこの時代にあまりに旧態依然とした言語であること。

ちょろっと何かを組むには非常に良い言語なんだけどね。俺もVBAでシステム組めって言われたら「え・・・」ってなると思う。

761 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 09:47:43.70 ID:UwALgNeL0.net]
そもそもVB自体が下に見られているからじゃないかな
知らんけど

762 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 09:54:07.85 ID:OyQV2dPc0.net]
>751
覚える事が信じられないぐらい少なく、誰でも使えるから
変数とif、for辺り知ってればほとんどの場合に対応できる
若干とっつきにくいのがset程度
更に相当テキトーに書いても他へ影響し辛い

どれも実務上は長所だけど、
他の言語を知ってると「なにこれ?」ってなるのはわかる。なんというかおもちゃっぽい

763 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 10:17:37.26 ID:M8ea68f50.net]
>>745
自分の環境だと、普通のフィルタをかけた状態ならそれで拾えるけど、フィルタのソートを行った状態は拾えないので、やりたくないけどどうしてもやるなら列のデータをなめるしかないのかなと

>>751
元々、Visual Basic自体がBASICという、学校でプログラミングの導入として教えるような簡易なプログラミング言語から派生したものだから、他の言語より低く見られていた
更にそこから派生したVBA(マクロ)やVBS(スクリプト)なんかはより低く見られている
まぁ実際に、図体の重たいプログラムでは手が届きにくい部分を補完する孫の手的な使い方をするのが主流なので、穴埋めや間に合わせ的な位置付けに見られているからだと思う

764 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:04:25.26 ID:1pI7yMTXM.net]
>>758
ソートは一時的な状態じゃないから完全に拾えるわけじゃないけど
ListObjects(...).AutoFilter.Filters(...).Sort
見たらわかるんじゃないの?



765 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:05:21.11 ID:bDLL2+/00.net]
>>751
差別しているのは Ruby厨だから無視していいんじゃね
そもそも言語に上下なんかないし

766 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:13:37.04 ID:M50L9SrL0.net]
>>757
> 他の言語を知ってると「なにこれ?」ってなるのはわかる。なんというかおもちゃっぽい

なんとなく納得できる表現だな。
C・C++・C#・JAVA・Rustとかの、かちっとしたのが当然だと思ってると面食らう。

特に Variant。まあ、最近はコンパイラ系に逆輸入されてるけど。

767 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:15:31.30 ID:M50L9SrL0.net]
あ。馬鹿にしてるわけではないよ。便利だと思う。

ただ、コンストラクタ引数と継承は入れてほしかった。

768 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:28:56.70 ID:tQGwfe1Lr.net]
VBAが言語として下に見られてるのかは知らんが書いてるやつの水準は他言語より圧倒的に下だよ
変数の型指定しない、withつかわない、まとめられる処理をまとめずにコピペし大量のモジュールを作る、配列とか使わないでセルを一回一回読み書き
こんなコードが会社のエクセルにはたくさんある
そしてそれが神マクロと崇め奉られてるのホントゴミ

769 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 11:44:30.01 ID:PUyOyrFtM.net]
>>761
> 特に Variant。まあ、最近はコンパイラ系に逆輸入されてるけど。
void * とか昔からあるけど?

770 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:02:30.08 ID:ZRWUeJUN0.net]
結果がすべて
仕事を終わらせたやつが評価されるんであって、どんな方法を使ったか、きれいに書いたかどうかなんて普通は問われない

771 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:10:51.21 ID:L/C5gyxS0.net]
>>765
俺もそっちだわ
仕様として許容されているなら使う人が目的達成できればどうでもいいんよ
まぁリファクタリングしろと言われたら発狂するが

772 名前:デフォルトの名無しさん [2022/01/29(土) 12:12:26.42 ID:nI5CwbIZ0.net]
何かを見下したい、マウントを取りたいのは、
愚か者の本能であって、理由は後付け。

VBA がハイコストパフォーマンスで
ある程度のシステムを構築できてしまう
便利なツールであることには変わりない。

頭の悪い人間ほど、意味のない格付けをしたがる。

773 名前:デフォルトの名無しさん [2022/01/29(土) 12:22:38.03 ID:nI5CwbIZ0.net]
Windows環境で、
なんらかの要件を実現する方法の選定として
導入コストを考えたら、DOSバッチでも
PowerShellでも、JavaScriptでも、WSHでも
既存のリソースのみで実現できる方が良いに決まってる。

特に日本人の思考は、合理性を軽視して、見てくれや
くだらない感情で判断することが多いので、
開発のプロジェクトでも時間とカネのコスト管理ができてない
愚かな企業が多い。

774 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:23:55.26 ID:hiZAoffAM.net]
>>765
そういう書き捨ての仕事もあるし、連綿と続く仕事もある



775 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:27:08.84 ID:nI5CwbIZ0.net]
結果として、他国からバカにされてる
日本の生産性の低さに繋がっている

あらゆる分野で、開発スピードは、
圧倒的に米欧・中華が優っている

776 名前:デフォルトの名無しさん [2022/01/29(土) 12:29:20.03 ID:iTemfgLK0.net]
>>768
例の馬鹿か

777 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:34:16.18 ID:Q0NPbY74r.net]
>>765
書き捨てではなく日々の定型業務につかわれ
それらが前提になって業務フローが組まれてるから
保守が必要なんだよなあ…
なお制作者と仕様書、コメントはない

778 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 12:43:35.90 ID:28WRDRfRr.net]
まあ正直、要件定義〜設計までの上流工程の人間からすると
言語は何でも良いんだけどね。

こだわるのはコーディングフェーズ以下の下流エンジニアであって。

779 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 14:49:20.34 ID:u7cBLx/b0.net]
関数が得意な人はなんでも関数で片付ける、マクロが得意な人はなんでもマクロでやろうとする傾向があると田中氏が言っていたな講演会で。
バランス良く使える人こそ真のエキスパートだとも。

780 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 15:14:16.94 ID:YNpwCmNLM.net]
>>774
そうなんか
確かに関数使うのって電卓がわりにするか文字の置き換えくらいかも

781 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 15:41:11.14 ID:D/yb4xS+0.net]
指定した範囲にそれぞれ外枠線を引きたいのですが、量が多くなると時間がかかるのでUnionを使いたいのですが、

Dim rng As Range, i As Long

Set rng = Range("B2:B3")
Set rng = Union(rng, Range("C2:C3"))

For i = 4 To 50 Step 2
Set rng = Union(rng, Range("B" & i & ":B" & i + 1))
Set rng = Union(rng, Range("C" & i & ":C" & i + 1))
Next i

rng.BorderAround Weight:=xl

782 名前:Thin

だと、Range("B2:C51").BorderAround Weight:=xlThin と同じになってしまいます。
短い時間で、それぞれの範囲に外枠線を引く方法を教えてください
[]
[ここ壊れてます]

783 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 15:45:53.96 ID:W/oxWoyf0.net]
>>753
https://www.google.co.jp/search?q=vba+%E3%82%BD%E3%83%BC%E3%82%B9%E5%8F%96%E5%BE%97

784 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 15:52:44.84 ID:MAc7BERw0.net]
>>761
JavaでもObjectになんでも突っ込めるじゃん



785 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:14:17.19 ID:u7cBLx/b0.net]
マクロ書くより手作業でやった方が早いのにわざわざマクロでやる人ばかりとも言っていたな。
なるほどなと納得する講演会だったね。

786 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:34:34.13 ID:L/C5gyxS0.net]
今知ったんだけどFalseってフォルスって読むんだな
考えてみれば失敗じゃなくて偽りだもんな
本職じゃなくて良かったわ〜

787 名前:デフォルトの名無しさん [2022/01/29(土) 16:35:06.88 ID:RDGmPxZCr.net]
なんで Cells を使わず、わざわざ
Range を使うのが多数派なんだろ。
メリットないじゃん。意味わからん。

788 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:40:41.52 ID:D0pOsND50.net]
>>774
田中さんそんなこと言ってたのか
俺ならバランスより効率重視だな
数式にマクロの関数仕込むこともあるし
その逆もある。

789 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:41:42.31 ID:fC9nxr54M.net]
だってマクロ書きたいんだもん

790 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:49:23.58 ID:wL4gsmFrd.net]
>>781
a1とかa1:f5とかを暗黙定義された名前と考えて
名前で指定するイメージ

791 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:04:38.36 ID:fQ9LbNHBM.net]
>>780
失敗は Fail だもんな

792 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:04:52.88 ID:L/C5gyxS0.net]
俺はcellsだよ、座標として捉えてるから数値との親和性が高く感じる

793 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:06:06.65 ID:L/C5gyxS0.net]
>>785
そやねん、フェイルセーフっていうからその延長で思い込んでしまってたみたい

794 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:06:09.58 ID:fQ9LbNHBM.net]
>>781
極端な例だけど Cells(100, 100) がどのセルを指してるのかすぐにわかるなら…



795 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:09:18.89 ID:L/C5gyxS0.net]
>>788
なるほど
でもSAの倍の座標がどこかが解りづらいんじゃない?

796 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:16:34.10 ID:OyQV2dPc0.net]
日本はA1形式なのでどっちにしても分かりづらい
歴史的経緯で今更どうしようもないとは言え、残念すぎる






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<287KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef