Excel VBA 質問スレ Part49©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/06/26(月) 02:15:14.60ID:T3ylemnb0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

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

※前スレ
Excel VBA 質問スレ Part48
http://mevius.2ch.net/test/read.cgi/tech/1494890685/

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/07/22(土) 12:26:21.19ID:DjK3yBdG0
>>431
新しい昨日が追加されるところ
まだクソなのはクソだけどvbaは一切進歩せんからなあ
2017/07/22(土) 12:38:20.99ID:kiQvn5e/0
新しい昨日って言葉が心に刺さった
2017/07/22(土) 13:17:27.76ID:c13VlgOtd
某ライブラリの悪口はやめろ
2017/07/22(土) 17:08:46.19ID:AfU+LLGPr
>>460
> vbaは一切進歩せんからなあ

エンジニアのための言語じゃないからね。

Dim だの Set だの If Then だの、
うんざりするのはしょうがないとしても、

objFSO

なんていう変数を見た日にゃ、
ぶっ殺したくなるね。
2017/07/22(土) 18:29:44.93ID:DjK3yBdG0
>>463
継承もサポートしてないしね
だから初心者の入口としても不向き
マイクロソフト的にもお荷物だろうな
はよ.net framework対応してほしいわね
2017/07/22(土) 18:50:19.82ID:WdXeAKAr0
そもそも継承が必要になるほどの大規模な開発をVBAでやる事自体が間違い定期。
2017/07/22(土) 19:09:15.96ID:mlphh3ze0
いまさら継承はいらないよ
2017/07/22(土) 19:22:53.47ID:DjK3yBdG0
まあ継承より配列周りの強化してほしいかな
わざわざ自分でコレクションもどき作ってるけどめんどいわ
2017/07/22(土) 21:16:12.56ID:yBUCBb6t0
初めてADOっての使ったけど、なんだこりゃ。

MSQueryと違って、列名が出ないじゃん。
いや、ヘッダのON・OFFで無理矢理出せるけど、
そうするとUnionした時に、レコードの途中に列名が出やがる。(列名扱いされないから?)
列名は、出力位置の上に、予め書いとかなきゃいけないの?
2017/07/22(土) 21:48:53.95ID:juX4uYOOx
>>467
コレクションもどきって何?
配列もどきのコレクションとは違う何かかな?
2017/07/22(土) 21:51:30.60ID:juX4uYOOx
フォームを作ってるとき、同種のパーツのオブジェクト配列が簡単に作れたら良いのにって思うわ
2017/07/22(土) 22:39:49.33ID:WdXeAKAr0
>>470
For Each x In Userform.Controls
    Select Case Typename(x)
        Case "Label"
            ...
    End Select
Next

みたいなのじゃなくて?
472デフォルトの名無しさん (ワッチョイ a791-8s/R)
垢版 |
2017/07/22(土) 23:56:17.15ID:IXNocUxm0
>>468
列名も取れる
2017/07/23(日) 01:19:51.07ID:Lr396bh+x
>>471
VBだとフォームパーツの型のオブジェクト変数として配列変数が宣言できる
何かと便利
2017/07/23(日) 07:50:57.33ID:Ecz0kxoE0
>>470みたいな需要は確かにありそうだ。
さっそくオレ様ライブラリに取り入れよう。
2017/07/23(日) 11:44:10.83ID:MDDS7K/i0
>>469
コレクションて値の出し入れできなかったりするじゃん?
値の追加、挿入、削除、入れ替え、ソートあたりメソッドにしたクラスだね
型は安全に出来ないけどなかなか便利
objectにも対応させたいけどやや面倒だから手を付けてない
2017/07/23(日) 22:46:54.50ID:EbUz/UVB0
>>472
Forで1つずつ取る方法しかなかったわ。
CopyFromRecordsetみたいに一撃弾平なのはないのね。
2017/07/23(日) 23:32:34.17ID:O7lPo0j+x
>>475
コレクションもどきって表現はミスリーディングだな
コレクションの拡張クラスだそれは
アイテムのソートと入れ替えは便利そう
2017/07/24(月) 02:14:49.51ID:mhaeOVx/0
>>477
for eachできないからコレクションもどきとした
中身はただの配列だし
2017/07/24(月) 06:50:21.77ID:t6cPW3USx
>>478
コレクションをラップしてるんじゃなくて中身が配列なのか
確かにそれだとコレクションもどきだな
2017/07/24(月) 08:13:01.75ID:2edahxxPa
>>479
継承できればコレクションからゴニョゴニョした方がいいんだろうけど
どうでも良いけど値の入れ替えのメソッド名をRepracementにしてるんだけどなんかしっくりこないんだよね
なんかいいのないかな
2017/07/24(月) 08:16:32.78ID:6zzYsskzd
そりゃ違和感あるだろな
2017/07/24(月) 08:53:04.80ID:2edahxxPa
>>481
入れ替えで辞書ツール突っ込んだらそれでてきたからしゃーない
2017/07/24(月) 09:00:24.88ID:vx6bYcmg0
配列の話題になってから調べて初めて知ったけど
ArrayListをVBAで使えるんだね
一通りメソッドもそろってるみたいだし、どうかな

実際に使ってみたわけではないけど
2017/07/24(月) 09:18:31.28ID:2edahxxPa
>>483
便利は便利だけど遅い
三桁四桁の配列なら大差無いだろうけどね
大抵はコレクションで事足りちゃうしね
2017/07/24(月) 13:58:09.64ID:n0AZ+pfTa
使い勝手はArrayListのほうが便利そうだね
まぁ確かに自分も使ったことないけど
2017/07/24(月) 21:11:53.14ID:nIPnkEuj0
ちゃんとしたやつがあるのかよwww
自作配列にArrayListって変数名付けたわwwww
2017/07/25(火) 15:00:10.14ID:1af6ROG50
VBAのArrayListって何よ?
2017/07/25(火) 15:01:06.45ID:WO88e3uDM
.NETのライブラリが使えるて話なんじゃないの?
2017/07/25(火) 16:38:16.45ID:k4b2Lxa9a
.netライブラリの話で思い出したけどコンストラクタに引数渡せないのクソ不便だよな
渡せるようになれば使えるライブラリも増えそうだが
2017/07/25(火) 19:00:27.87ID:cmKKN7nU0
>コンストラクタに引数渡す場面ってある?
シートの名前ぐらいなら返り値の.nameを変えるけど、何とも思わん
2017/07/25(火) 19:39:14.04ID:RB4NOmYpd
コンストラクタでしか初期化できない(他の初期化用メソッドを持たない)クラスがあれば困るけど、
そういうものって.Netにあるの?
2017/07/25(火) 20:05:49.03ID:cmKKN7nU0
>>491
const
vbaでconstが必要な用途が良くわからんけど
2017/07/25(火) 20:19:25.50ID:KNlosRFTM
>>488
えっ、そんな機能いつ実装されたん?
2017/07/25(火) 20:27:13.52ID:KNlosRFTM
>>491
VBA から使うとは思えないけど Exception の Message はコンストラクタでしか設定できないよ

そもそも>>489はそういう話じゃないような気がするけど
2017/07/25(火) 22:08:51.03ID:8cBHpzox0
>>493
.netのクラス使えないのかな?って以前ググったときに
http://officetanaka.net/excel/vba/tips/tips98.htm
が引っかかって
えらい簡単に使えるんだなぁと思ったんだけど
思っただけで使ったことないし
細かいことも知らない…
ていうか、本当にいろいろ便利に使えるなら
ググるだけでバンバン情報引っかかっていいと思うんだけど
ArrayListのことくらいしか出てこんかった
2017/07/25(火) 22:30:18.63ID:k4b2Lxa9a
>>490
ブックをそのままラップしたクラスとか作りたいときにパス指定するためのメソッドわざわざ実装するのとかクソめんどくさいじゃん
結構引数指定したい場面あるよ
逆になんで引数渡せないのかという
2017/07/25(火) 22:39:21.79ID:cmKKN7nU0
>>496
そういうのは諦めた
エクセルに限らず、IEやら何もかもインスタンス作成してから、プロパティを変更している
言語仕様を嘆いても始まらん
2017/07/25(火) 22:46:52.90ID:8cBHpzox0
話の流れで思い出したけど
これ使ったことある人いる?
マクロをC#で書けますよっていうやつ
http://mokumokucsharp.hateblo.jp/entry/2016/07/13/140602

Visual Studio Codeとかいうのもインストして
サンプルは動くんだけど
インテリセンスがうまく効かんくて使い方がよくわからない
2017/07/25(火) 23:01:14.52ID:Vr2PvTdG0
それもそうだけどクラスを含むプロジェクトを参照しているモジュールからそのクラスのインスタンスを
直接Newで作れないのにも困ってる。
Create〜系の関数を書いて置き場所に迷う場合が特に。
2017/07/25(火) 23:03:35.24ID:6CdgJbJQ0
仮にC#使いだったとしても、VBA覚えるわ。
VBAにある機能をどれくらいカバーしているのか。
99%以下ならイラネ。

ていうか、そもそもどういう仕様だろう。
C#で書いたのを、内部的にVBAに翻訳して標準モジュールに書き込むとかだったら笑う。
2017/07/25(火) 23:05:23.65ID:6CdgJbJQ0
よく見たら、
全てのVBAコードを生まれる前に消し去りたいとか、凄いこと書いてる。
何かに憑りつかれてはいませんか。
2017/07/25(火) 23:08:46.90ID:cmKKN7nU0
機能よりも言語仕様で
if()then
とかやっちゃう
2017/07/25(火) 23:09:23.62ID:cmKKN7nU0
しかもうまく動くから消すか消すまいかで悩む
2017/07/25(火) 23:34:05.22ID:K76AsuLq0
重複した行を削除したいのですが、ググってみると
重複した下の行を削除するプログラムが殆どです。
上の行を消すプログラムはないでしょうか?
2017/07/25(火) 23:46:50.72ID:K76AsuLq0
自己解決しました。
2017/07/26(水) 00:01:02.57ID:/aun+12z0
>>500
なんでこんな馬鹿なのに偉そうにできるんだろう
2017/07/26(水) 00:08:54.58ID:7P86XL9W0
>>506
だって、要は、VBA使いこなせないからC#でとか言ってるわけだろ。
VBAに心の底から辟易って、使う人の能力の問題を、何で言語のせいにしてるのか。
2017/07/26(水) 00:11:51.48ID:U77Cst6m0
質問です。
Excel2007ですけど、複数のオートシェイプをグループ化せずに同時にカットできますか?
オートシェイプを選択してSelection.Cutメソッドを実行すると、なぜかセルがテカテカするのです。
ShapaRangeオブジェクトにはCutメソッドが無いみたいですし。
とりあえずSendKeys "^x"で対処してるけどなんだかなあ、という状況です。
2017/07/26(水) 00:13:05.34ID:kYPrva630
RangeのUnion、初期値がNothingのときエラーになるのが残念だ
2017/07/26(水) 00:13:33.72ID:kYPrva630
初期値つーか左辺
2017/07/26(水) 00:21:08.24ID:o5MQIZHRr
Officeが入っていればどのPCでも動く、というVBAの最大の利点を犠牲にしてまでC#で書く意味はないね。
自己満以外の何ものでもない。
幸せになるのは自分だけ。
2017/07/26(水) 00:30:16.20ID:kYPrva630
自分の仕事が楽になるならいいんじゃないか
共有するやつは別
2017/07/26(水) 00:50:15.20ID:Fm0oLH560
VBAって基本、かならず自動でコンパイルされた上で実行されるんですか?
[デバッグ]-[コンパイル]ってやらずに実行するとえらく遅いんですが。
2017/07/26(水) 03:26:24.46ID:KTzuPZaba
日本語変じゃね
2017/07/26(水) 06:22:23.80ID:o5MQIZHRr
>>512
コード資産が共有できない(自分の中でも)、というプログラマにあるまじき行為。
2017/07/26(水) 07:04:52.98ID:2BL9ZNyZM
>>495
> http://officetanaka.net/excel/vba/tips/tips98.htm
> が引っかかって
> えらい簡単に使えるんだなぁと思ったんだけど
これは知らなかったわ、教えてくれてありがとう

> ていうか、本当にいろいろ便利に使えるなら
> ググるだけでバンバン情報引っかかっていいと思うんだけど
> ArrayListのことくらいしか出てこんかった
ちょっとググったらCOM経由で動くみたいね(CreateObject で作成するんだから当たり前か)
http://qiita.com/mima_ita/items/efcd1a6ea86f09047984
2017/07/26(水) 07:14:09.63ID:2BL9ZNyZM
>>498
これ使うぐらいならPowerShell使う
2017/07/26(水) 07:36:03.65ID:o8wFJ9U0d
>>515
環境の問題なら、自分のなかでは使い続けられるんじゃね?
2017/07/26(水) 07:46:37.45ID:rbCQuCda0
>>511
中間言語があるんだよなぁ
2017/07/26(水) 07:52:21.56ID:o5MQIZHRr
>>518
既存のVBAコードに、C#で書いたプロシージャを呼び出すコードを追加することはできないよね。

VBAで書いたWinのExcelマクロはMacのExcelでも使えるけど、C#で書いたらMacでは使えないよね。
2017/07/26(水) 07:53:30.08ID:o5MQIZHRr
>>519
え? マジで? kwsk
2017/07/26(水) 07:58:49.22ID:PoLK+oD40
VBAはもう言語仕様をアップデートするつもりはないんだろうけど
せめてIDEくらいはもうちょっと便利にして欲しい

>>516
つまり相互運用の登録がされているライブラリは使えるってことか
でもいちいち自分でdll作ってまでは使わないかなぁ…
2017/07/26(水) 08:36:41.46ID:N2NJoKbw0
eclipseがVBA対応したらウケるね
2017/07/26(水) 09:23:17.61ID:2KFV8mEox
>>508
コードや実行環境、ファイルサイズなどを見ないと何とも言えない
それから、セルがテカテカするとかいう感覚的な表現はなるべく避けるように
2017/07/26(水) 09:40:24.60ID:19gyZHTT0
>>522
dllを作るってどういう状況で必要になるのかよく分からんよな。

別途用意する必要があるって事は他人に使わせるのに難があるし、
VSTO使えるならVSで他の言語使った方が早い場面が多いだろうし、
自作のdllが必要になるような処理をVBAに求める場面というのが想像出来ない。
2017/07/26(水) 10:40:08.38ID:FItiZl47d
「Macだと」とか「プログラマとして」とかちょっとこのスレの想定ユーザーからはかけ離れてるんじゃないか?
2017/07/26(水) 10:40:27.92ID:nObVd20Fa
>>507
いや、vbaがクソ言語なのは避けようのない事実だろ
C♯erがわざわざ新しく覚える時間が無駄というのは分かるよ
オブジェクト指向にドップリしてたら使いにくいことこの上ないと思うし
2017/07/26(水) 11:27:30.63ID:FItiZl47d
そんなにクソ言語だとは思えない
2017/07/26(水) 11:43:09.73ID:19gyZHTT0
VBAをクソクソ言っている人たちはどういう立場なんだろうな。
クソだと思うなら近づかなければいいのに。

なんか他の言語でもメインで使い始めた途端にクソクソ言いそう。
2017/07/26(水) 11:49:10.59ID:FItiZl47d
作ったものを他人と共有しようとすると限界が低い。でも自分一人ツールと割り切れば相当なことができる。
Officeソフトにそれ以上求めてもしょうがないでしょ。
2017/07/26(水) 12:23:16.56ID:N2NJoKbw0
VBAは手軽さを重視してるんだから、高度な機能がないって意見は的外れなんだよ
2017/07/26(水) 12:43:21.28ID:0/Y/FM4fM
>>529
ん?
アマチュアの人かな?
お仕事ならクソだろうが使わざる得ない状況なんていくらでもあると思うが
2017/07/26(水) 12:47:32.19ID:aG45BvrzM
>>529
理解できない自分を正当化してるだけさ
2017/07/26(水) 12:57:07.83ID:19gyZHTT0
>>532
VBA言語をクソって言っちゃうくらいなのにVBAでお仕事取っちゃうの?
もう少し仕事は選んだ方がいいんじゃないか。
2017/07/26(水) 13:05:35.40ID:ecs8OXuXd
そんなことだと底辺職業だと見なされるぞ
2017/07/26(水) 13:36:33.55ID:o5MQIZHRr
>>526
うん、そういうこと。

ExcelマクロをC#で書くような人は、このスレの想定ユーザーからはかけ離れてるよね、ってこと。
2017/07/26(水) 13:40:18.49ID:nObVd20Fa
クソだけどofficeのマクロ言語はこれしかないから仕方なく使うしか無いだろ
プログラム言語としては時代遅れの化石なのはさすがに共通認識だと思ってたわ
現状くそなのもそうだし、これから先進化することも決してないこともクソ
あと、手軽さと高度な機能は別に共存できるでしょ
2017/07/26(水) 14:23:28.25ID:ecs8OXuXd
>>536
それは別にかけ離れてはいないだろ

Macだとかプロのプログラマはかけ離れている
2017/07/26(水) 14:25:46.34ID:/aun+12z0
プログラマとしてって言いだしたのって(オッペケ Sr1b-QbI6)だな
自演までして何がやりたいんだか・・・
2017/07/26(水) 14:27:35.77ID:+1cN/gIlH
>>527
> オブジェクト指向にドップリしてたら使いにくいことこの上ないと思うし
俺は逆だと思うよ

オブジェクト指向をよく知ってたほうが、VBAを使いこなせる
・クラスモジュールを使いこなす
・いわゆる「インタフェース継承」を使いこなす
・WithEventsを使いこなす
大抵の奴は「クラスモジュールっていつ使うんですか」レベルだから
2017/07/26(水) 15:11:24.07ID:ZPUGQ/usa
>>540
俺の言いたいことを一ミリも汲んでくれてないなw
そりゃオブジェクト指向的なプログラミングを知ってれば非オブジェクト指向言語でも構造的に自然と書くようになる
それとこれとは別の話
機能がないからわざわざ自分で作らにゃいかんから不便だって話をしてる
542デフォルトの名無しさん (ワッチョイ df06-pqVL)
垢版 |
2017/07/26(水) 16:52:15.43ID:6VvQXdi20
この手の下らんやり取りはこれまでもあったし、これからもウンザリするほど続くんだろうなぁ┐(´д`)┌ヤレヤレ
2017/07/26(水) 18:04:37.55ID:o5MQIZHRr
>>539みたいに、自演自演て騒ぐ奴をしばしば見かけるけど、彼は何がしたいの?

つか、そもそもここは自演ができないスレなんだよね?

こういうのはスルーしたほうがよいのでしょうか。
544デフォルトの名無しさん (ササクッテロル Sp1b-8s/R)
垢版 |
2017/07/26(水) 18:16:40.16ID:VQAVDfi4p
>>541
オブジェクト指向と機能は別の概念だけどな
機能は言語がなんであっても追加出来るだろうし
オブジェクト指向は言語に関する概念だから
2017/07/26(水) 18:30:45.45ID:19gyZHTT0
オブジェクト指向は設計に対する概念
2017/07/26(水) 18:33:38.33ID:+1cN/gIlH
>>541
オブジェクト指向の一切を封じられてるから使いづらいというのなら、それはそうでもないってことさ
機能が足りないというんなら、先人が作ったライブラリでも探せば?
https://github.com/rubberduck203/VBEX とか
547デフォルトの名無しさん (ササクッテロル Sp1b-8s/R)
垢版 |
2017/07/26(水) 18:41:04.50ID:VQAVDfi4p
>>545
設計と言語両方じゃね?
2017/07/26(水) 19:21:44.23ID:rbCQuCda0
>>540
自作クラスってどういう時に使うの?
excelが思いっきりオブジェクトだから、それに対する手続き的な操作しかしないわ
2017/07/26(水) 19:28:41.05ID:ecs8OXuXd
>>548
状態を持ったモノを扱いたいときじゃね?
状態を持たないんだったら関数の組み合わせで表現するのは簡単だ。
2017/07/26(水) 19:39:55.05ID:pjdGyN9QM
>>534
言語で仕事選べるとか無職の発送は素晴らしいな w
551デフォルトの名無しさん (ワッチョイ a791-8s/R)
垢版 |
2017/07/26(水) 19:42:18.93ID:W1HWCg900
>>549
状態を持つ⇒オブジェクトを使う
対偶は
オブジェクトを使わない⇒状態を持たない

対偶は必ず真とはいえなくない?
2017/07/26(水) 19:45:32.31ID:pjdGyN9QM
>>548
ログクラスとか作ってたな
書き込むシートと書き込む行を別々に管理するのは嫌だったから
でも継承もできないしコンストラクタの引数も持てない状況ではあまり使いやすくならないし結局クラスはほとんど使わない
そもそも俺がずっと保守するわけにもいかんから
2017/07/26(水) 19:45:44.80ID:19gyZHTT0
>>547
オブジェクト指向言語は「オブジェクト指向的な設計が可能な言語」の事だから、
言語によってオブジェクト指向が決まるわけではないし、言語に対する概念というと違うと思うなぁ。

>>550
募集要項に何の言語が出来るかとか普通書いてないか?
Javaで募集かけたけどC#での開発がメインですみたいなカオスな職場もあんまりないだろ。
2017/07/26(水) 19:46:32.77ID:+NZ2Dbuu0
>>544
オブジェクト指向をサポートしてるかって話だよ
なんとなく分かるべ
>>546
ことさ、じゃなくてさ
俺はそういうところがクソだと言ってるの
クソはクソでも使わなきゃいから使うだけで
ライター、チャッカマン、バーナーが他所であるのにマッチでも火をおこせるしこれはこれで良いもんだぞって言ってるようなもん
2017/07/26(水) 19:52:11.21ID:rbCQuCda0
>>552
ログはfunctionだなぁ
コンストラクタ使えないと、わざわざNewしてクラス無いメソッド呼び出してって二度手間じゃね。
functionならいつでもどこでも一行で済む
2017/07/26(水) 19:53:00.06ID:ecs8OXuXd
>>551
⇒(ならば)とは言ってないけどな

まあ、オブジェクトを使わない⇒状態を持たせづらい(グローバル変数を使うはめになる)

あくまでVBAでの話だよ
2017/07/26(水) 19:53:37.44ID:rbCQuCda0
>>549
例えば、具体的にどういう時に使うの?
状態って言っても初期値とかExcelから拾ってくるから、それをわざわざclassにほーり込むのもなー
558デフォルトの名無しさん (ワッチョイ a791-8s/R)
垢版 |
2017/07/26(水) 19:56:29.43ID:W1HWCg900
>>553
オブジェクト指向言語は
オブジェクト指向設計したものを
そのまま実装し易い言語じゃないかな

言語の概念でもあると思うけどな

オブジェクト指向言語じゃなくても実装できるのは確かだけど
それならVBAでもオブジェクト指向設計を実装できるんじゃないかな
2017/07/26(水) 19:57:08.36ID:ecs8OXuXd
>>557
初期値より途中の経緯を記憶しておかないと次の計算ができないものとか?
「ワークシートに書き出す」じゃ再利用性に欠ける
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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