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/20(木) 13:40:13.76ID:fTGUueKRd
それとも手持ちの関数をまんまコピペしたのかな?
2017/07/20(木) 18:17:53.32ID:IzREkzShr
ま、配列の空判定関数は各自で書くということでこの話題は完結かな。

ちなみに俺は、

Function ArrayEmpty(hoge) As Boolean
  On Error Resume Next
If UBound(hoge) - LBound(hoge) < 0 Then ArrayEmpty = True
End Function

って感じ。

空判定関数を書くというだけの話題だったけど、いろいろ勉強になったね。

おつかれさまー。ノシ
2017/07/20(木) 18:32:35.34ID:IzREkzShr
3行目は

If UBound(hoge) < LBound(hoge) Then ArrayEmpty = True

のほうが美しいな。
2017/07/20(木) 18:53:02.67ID:2lo8GEfG0
そしたら

ArrayEmpty = UBound(hoge) < LBound(hoge)

でもいける。
2017/07/20(木) 18:56:56.64ID:IzREkzShr
>>411
素晴らしい!!

頭が柔らかくて羨ましいよ。
2017/07/20(木) 19:42:53.19ID:0IwNCiVxd
完成した関数テンプレにのこしておいてよ
vbaの良質なコードはすごく希少だし
2017/07/20(木) 19:58:58.45ID:qV+ymKYWM
>>406
たまたま動いてるだけのコードも正しいと言い張るの?
2017/07/20(木) 20:06:31.90ID:IzREkzShr
>>414
つか、いったい何が悔しかったの?
君ほどの実力者が。
2017/07/20(木) 20:27:30.52ID:IzREkzShr
>>413
どこに残せばいいの?

完成品はこれでいいかな。

Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty, vbNull
      IsNone = True
    Case vbObject
      IsNone = hoge Is Nothing
    Case vbString
      IsNone = Len(Trim(hoge)) = 0
    Case Is >= vbArray
      On Error Resume Next
      IsNone = UBound(hoge) < LBound(hoge)
  End Select
End Function

簡潔で美しいね。みんなの力の結晶だ。
2017/07/20(木) 22:00:04.12ID:4n7T5v3d0
>関数テンプレにのこしておいてよ

どこにあんだよ、そんなの
ここで知った人間で保存しておきたいって奴が保存しておけば良いだろ
2017/07/20(木) 23:07:38.62ID:2lo8GEfG0
スレッドのテンプレに残しておいてほしいって事なんじゃないの。
でも残し始めたら際限無くなるし、コピペで済ませずに理論と意図を理解して同じものを一から書けるようになってほしいなぁ。
2017/07/21(金) 05:39:07.68ID:qElIELIq0
>>415
えっ?
なにか悔しいことでもあったの? w
420デフォルトの名無しさん (オッペケ Sr1b-8ndb)
垢版 |
2017/07/21(金) 12:22:10.00ID:vdvVccQ6r
こんなコードテンプレに残したらますます初心者が初心者を惑わすスレに拍車がかかるなw
本当に仕事でエクセルマクロを必要としてる人には迷惑かけんなよw
2017/07/21(金) 12:42:41.45ID:omOOvC2LM
残せというやつがwikiでも立てて残していきなよ
2017/07/21(金) 14:22:43.43ID:WPcJx8Myr
> 初心者が初心者を惑わすスレ

言い得て妙だww

いいんだよ、それで。
VBA使いはエンジニアじゃないから。
2017/07/21(金) 14:37:29.87ID:Rk0p0Likx
>>422
さーせん
lsi engっす
2017/07/21(金) 14:46:06.01ID:+UMDimrcM
>>422
まだVBA使い≠エンジニアとか言ってるの?
エンジニアでもVBA使いは居るってのに
2017/07/21(金) 15:00:26.78ID:rDxvAnQTM
低スキルにありがちな下らないレッテル張り
2017/07/21(金) 15:28:32.09ID:4zV211iR0
どの言語の質問スレも初心者が初心者を惑わすスレ化してるのが悲しい。
「よくある質問と回答」レベルなら問題ないんだけど、ちょっと突っ込んだ質問になるととたんに雲行きが怪しくなる。

ある程度の実力を身につけたら2chじゃなくてちゃんとしたコミュニティか何かに参加するべきなんだろうけど、
だいたい見つからないし、見つけても2chほど気軽に質問投げられるような場所じゃなかったりするんだよな。
2017/07/21(金) 17:53:53.00ID:WPcJx8Myr
>>426
知恵袋とか、もっと酷いよ。
2017/07/21(金) 19:35:15.46ID:tSBq1lkVM
>>426
ネットの情報なんだから裏を取ればいいだけ
今時書いてあるキーワードでググれば調べるのもそんなに苦労しないしな
惑わされるより過疎化してまともな回答が少なくなってる方が問題だわ
2017/07/21(金) 19:48:27.62ID:xN3mSVPqr
>>424
エンジニアでもVBA使いは居るけど、
VBA使いになりたいエンジニアはいない。
2017/07/21(金) 19:55:14.10ID:BM2lcFDS0
>>429
これな
いやいやだわ
javascriptのほうが楽しいし
2017/07/21(金) 19:56:51.84ID:xN3mSVPqr
>>430
JavaScriptのほうが楽しい理由は?
2017/07/21(金) 19:57:13.96ID:/kK1+YO60
>javascript
お、おう
2017/07/21(金) 20:01:12.83ID:cakM1ik60
javascriptってvbaの次に底辺やんwww
2017/07/21(金) 20:05:21.15ID:ZXE38ZHX0
そりゃていへん(大変)だ


(´・ω・`)b
2017/07/21(金) 20:10:04.71ID:xN3mSVPqr
>>433
使ったことある人が多い言語って底辺扱いされやすいよね。

おそらく、C や Java の比じゃないと思うよ。>VBA

でも、Java は使う人が多くなりつつあるから、底辺扱いされるのは時間の問題かもね。
2017/07/21(金) 20:58:10.67ID:4zV211iR0
新興の言語って利用者全員が似たような習熟度だから意思疎通が図りやすいし、
どんなにクソみたいなコード書いても判断材料が無くて効率的なコードって言ってもらえるからな。
2017/07/21(金) 21:00:52.93ID:Byrlump20
>>369
欠陥なんじゃなくて、馬鹿ほどvariantを使う法則なだけ
2017/07/21(金) 21:04:33.39ID:mLcSl7GWd
何の話だっけ?
2017/07/21(金) 21:21:32.57ID:/kK1+YO60
西中島南方北口の話
2017/07/21(金) 21:54:13.22ID:xestLY0Q0
長い間SQL触ってたので、
SelectがVBAにもあったのを完全に忘れていた、という話。
2017/07/21(金) 21:57:47.01ID:/kK1+YO60
複数の言語を使うとselectとswitchは妙に間違える
俺だけかねー?
2017/07/21(金) 22:03:49.06ID:mLcSl7GWd
>>441
わかる
2017/07/21(金) 22:16:02.62ID:gUUF92OH0
JavascriptにおけるjQuery的な
VBAのクラスってどっかにないのかな

Set class = New class
class.lastRowAdd(Range("a1"),array)
ってやったら最終行に配列の内容をぶっ込んでくれる
とか
よくある操作をパラメーター渡せばやってくれるような
2017/07/21(金) 22:20:47.57ID:zOHs/jgU0
>>443
それって結果は何になるの?
2017/07/21(金) 22:30:00.89ID:gUUF92OH0
>>444
このコードは妄想クラスメソッドなのでエラーになるけど
もし、いろんな汎用処理を詰め込んだクラスなりを
誰か作ってたら欲しいなーと思いましたとさ、という話
2017/07/21(金) 23:32:25.33ID:zOHs/jgU0
>>445
そうじゃなくて1次元配列が出来上がるとか2次元配列が出来上がるとか
もちょっと具体的に
あと第二引数はなんだ?
2017/07/21(金) 23:36:11.83ID:/kK1+YO60
そこまで引っ張る話題でもなくね?と思うけど確かにどうしたいのかわからんのもあってちょっと聞きたくもあり
2017/07/21(金) 23:41:52.51ID:4zV211iR0
見た目からするとSQLで解決しそうな感じがする。
2017/07/22(土) 00:08:10.36ID:AfU+LLGPr
科学計算が爆速でできるVBAのフレームワークができれば、VBAの価値は一気に上がる。
2017/07/22(土) 00:08:20.61ID:6zQAY8zL0
データベースな表で
第一引数のセルから下に見ていって一番下に
第二引数の配列をズドンと書き込む
という想定

たしかにそこまで引っ張るネタでもないです
451デフォルトの名無しさん (ワッチョイ c78b-8ndb)
垢版 |
2017/07/22(土) 00:10:10.03ID:uAFmR2/H0
そんな事言わずにもう少しひっぱろうぜ
2017/07/22(土) 07:42:45.82ID:SunxEu+00
>>450
ネタで言ってるなら申し訳ないが、それその通りに書くだけで良くね?
2017/07/22(土) 10:25:51.44ID:8D42j0aL0
>>452
そういう話ではない。

まあでもVBA用の色んな処理の検索はしてきたけど、アドイン化されてるものは全然見かけないなあ。
汎用的な機能を詰め込んだアドインってこれくらい?
http://software.opensquare.net/relaxtools/
>>443の求めるものとは違うんだろうけど。

結局は自作クラスってことになりそう。
2017/07/22(土) 10:32:33.05ID://x1WvHm0
>>451
お前の下らん雑談ネタのためにこのスレが有るわけじゃないんだyo
2017/07/22(土) 10:39:13.62ID:kiQvn5e/0
あぁarrayは横向きの配列ってことか、なるほど
VBAで汎用ライブラリ作るとしたらどんな名前になるだろう
tyっと作ってみたくもあるな
2017/07/22(土) 10:51:06.27ID:c13VlgOtd
ブログ検索すれば色々出てくるから好きなのを使う。
製品的なやつが欲しいなら知らん
2017/07/22(土) 12:11:05.98ID:I23HDuqEd
完成した関数テンプレにのこしておいてよ
vbaの良質なコードはすごく希少だしアドインってメンテナンス大変じゃないか?
用途としてはいろんな人に使わせる用だと思うんだけど誰かが使ってる最中に変更できないじゃん
やたらにバージョン上げると某ライブラリみたいな顛末になるし
2017/07/22(土) 12:15:52.49ID:1BwCflG80
じゃあコピーしたもん編集して誰もいないときに上書きすればいいじゃん
2017/07/22(土) 12:17:43.62ID:kiQvn5e/0
テンプレなんかに残すと肥大化して仕方ない
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に心の底から辟易って、使う人の能力の問題を、何で言語のせいにしてるのか。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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