X



Excel VBA 質問スレ Part57
■ このスレッドは過去ログ倉庫に格納されています
0004デフォルトの名無しさん
垢版 |
2018/09/11(火) 00:01:04.42ID:2R4DuIA+
「ここなら俺でもマウントとれるだろう」
と他所では負けっぱなしの奴らが集まってくる。
0005デフォルトの名無しさん
垢版 |
2018/09/11(火) 01:02:29.42ID:lrKPSTD5
Excel VBAに関する疑問を抱いて訪れた人がVBAerの惨状を垣間見て、人生に関する疑問を得て帰る
ここはそんなスレ
0006デフォルトの名無しさん
垢版 |
2018/09/11(火) 01:05:42.43ID:FQ+eV6sL
Dictionaryのキーと要素の静的型情報がどうしても消えてしまうのですがバグでしょうか?
0008デフォルトの名無しさん
垢版 |
2018/09/11(火) 07:05:37.39ID:qCfc++eI
>>6
仕様だと思う
0009デフォルトの名無しさん
垢版 |
2018/09/11(火) 07:06:20.92ID:qCfc++eI
System.Collection.Hashtableと使い分けるのがよろしいかと
0012デフォルトの名無しさん
垢版 |
2018/09/13(木) 06:42:08.49ID:MLrTlesq
>>1
Z
0016デフォルトの名無しさん
垢版 |
2018/09/13(木) 18:43:42.97ID:jnyPcCTa
>>15
ドトネトーのmscorlibはcomがあるんよ
CreateObjectでインスタンス化できる
参照設定でmscorlib.dllを読み込めば型指定できる
0018デフォルトの名無しさん
垢版 |
2018/09/13(木) 23:51:26.06ID:/ggcYMdi
excel vbaって、変数を日本語で定義することができるんだな
感動した
0020デフォルトの名無しさん
垢版 |
2018/09/14(金) 07:57:23.09ID:5PCa/oFv
配列多用してプログラ厶書いたけどコレvbaしか出来ない事務レベルのやつは内容分かるんだろうか
職場では似非プログラマの自分とその他しかいないのでメンテ出来なくなりそう
0022デフォルトの名無しさん
垢版 |
2018/09/14(金) 08:53:13.81ID:itNItVhP
コメント入れる前に整理してくれ
汚いコードのコメントは汚くて結局わかりにくいままになるぞ
0024デフォルトの名無しさん
垢版 |
2018/09/14(金) 12:16:51.56ID:LywiNQOe
VBAをやっとこさいじれます、っていう感じの人には配列の理解は厳しいぞ
配列のサブスクリプト、コレクションのインデックス、ハッシュテーブルのキーの相互の違いが分からなかったりするからな
0027デフォルトの名無しさん
垢版 |
2018/09/14(金) 17:49:25.94ID:Rix9Ja+2
まぁなんでもそうだろうと思うけど、判る人間には判らない人間がなぜ判らないのかが判らない w
0028デフォルトの名無しさん
垢版 |
2018/09/14(金) 18:47:04.71ID:5PCa/oFv
いや配列は分かるのかもしれん
ただプロシージャさえ使わず変数名にaとかbとか付けてたりで数百行書いてるようなマクロが散見されるほどうちのレベルは低いからちょっと不安
0029デフォルトの名無しさん
垢版 |
2018/09/14(金) 18:53:37.98ID:8jcNJm47
変数が分かるんなら配列も分かりそうだけど、そんなに難しいかな?
「配列っていうものもあるんだなー」程度でも認識さえしていれば、
むしろ配列しか使ってないコードならそのうち理解してくれそうな気がする。
途中でコレクションとか辞書とかヘンなオブジェクトとか自作クラスとか使ってなければ。タブン。
0030デフォルトの名無しさん
垢版 |
2018/09/14(金) 19:06:28.55ID:8jcNJm47
よく考えたら、コードの読みやすさは「何を使うか」より「どう書くか」の方が重要な気がする。
ともあれ、職場に何人かVBAが書ける人がいるようだから(非常に素晴らしいことに)、
適当に何人かひっ捕まえて使わせてみて率直な感想を言ってもらうといいんじゃなかろうか。
0031デフォルトの名無しさん
垢版 |
2018/09/14(金) 20:17:01.33ID:/DsKfDfg
Worksheet.CellsとかRange.Offsetとか、引数に二次元配列をとるアクセサを使えない人は結構いる印象だよな
0032デフォルトの名無しさん
垢版 |
2018/09/14(金) 23:44:55.63ID:za5qG/O1
配列の難しさがわからんのは配列すらわかっとらん証拠やぞプロさん達w
0033デフォルトの名無しさん
垢版 |
2018/09/14(金) 23:53:34.83ID:KNVYDbzH
>>32
どんなデータ構造にもそれなりに難しい点はある、と言われればそうだが、
配列で難しい点を具体的になにか挙げないと意味ないぞ。
0035デフォルトの名無しさん
垢版 |
2018/09/14(金) 23:56:00.89ID:za5qG/O1
>>33
意味がない、ではなくおまえには意味がわからんのやろ
知ったことかそんなもんw甘ったれんなカスw
0037デフォルトの名無しさん
垢版 |
2018/09/15(土) 00:26:05.12ID:XNrqFkTO
excel vbaでテトリスとか作れるようになると、excel vbaを使いこなせられるようになったと思っていい?
0038デフォルトの名無しさん
垢版 |
2018/09/15(土) 00:37:49.64ID:0OTUBrr2
>>37
いくない、Excelはゲーム作成用ツールじゃない
0040デフォルトの名無しさん
垢版 |
2018/09/15(土) 14:47:18.53ID:kCggA2zW
テトリス作れるレベルならそこらへんの私VBA得意ですドヤよりスキル的に遥かに上だから、
VBAらしく事務処理の自動化をやるくらい楽勝だよ
0041デフォルトの名無しさん
垢版 |
2018/09/15(土) 14:58:06.40ID:FpfMU/ZL
テトリス作る時間に他の勉強をするべき。
そこまで求められてないから無駄。
0042デフォルトの名無しさん
垢版 |
2018/09/15(土) 16:22:43.79ID:MP3gARzS
>>37
字面だけでいえば、「Excel VBAでテトリスが作れるレベル」なら、「Excel VBAはそれなりに使いこなせる」と言える。
ただ、それを訊いて何をしようとしているのか分からない。内容次第ではおすすめしない。
0043デフォルトの名無しさん
垢版 |
2018/09/15(土) 16:34:10.47ID:oLja5sKR
VBAでテトリス作る意味って何?
0044デフォルトの名無しさん
垢版 |
2018/09/15(土) 16:36:20.47ID:RH+0S0Ax
それなりというか世の中の自称VBAのプロのほとんど全員より上だろう
それ以上の人はVBAできますなんて恥ずかしくて言わない
0045デフォルトの名無しさん
垢版 |
2018/09/15(土) 16:54:50.81ID:g80wVNRI
エクセルVBAでテトリス作るのは芸ではあるけど実用的じゃない
どうせならエクセルで機械学習とか実務に使う余地があるものやれば
0046デフォルトの名無しさん
垢版 |
2018/09/15(土) 16:55:58.42ID:g80wVNRI
プログラマはVBAできます
なんてわざわざ言わない
他言語ができればできて当たり前だから
0047デフォルトの名無しさん
垢版 |
2018/09/15(土) 19:14:56.89ID:XNrqFkTO
>>43
vbaを使いこなせられるというか、これが作れるようになれば、この先いろんなツールをつくろうが、
応用がきくという意味で、テトリスという題材を選んでみた。

俺、間違ってることいってる?
vba使いこなせられるになる基準として、何かこういうの作ってみろ的なことがあればいってほしい。
0048デフォルトの名無しさん
垢版 |
2018/09/15(土) 19:25:00.03ID:vKLFrcGU
散らばった支社にプログラムを配るにしても、
完璧にシステム仕様が決まっていて、テストも十分終えたもの以外は、一つのExcelファイルに
 プログラム
 設定データ
 蓄積データ
をまとめるのはやめとけって忠告したのに・・・。

プログラムのバグ修正のたびに、支社の端末を直接操作しているVBAマスターを自称する後輩が・・・。
土日ももう呼び出し呼び出し。完全に病んでしまった。

あれほど忠告したのに・・・。
安易な作りでデータ等々を抱えると、プログラムの修正だけしたくても、簡単にはいかないから、
せめて蓄積データだけは別のエクセルファイルなりに保存して開いて使うなりの仕様にしとけと・・・。
0049デフォルトの名無しさん
垢版 |
2018/09/15(土) 19:56:51.35ID:JWnql4hZ
>>47
勘違いしてるようだが、テトリスはプログラミングの練習ネタとしてはかなり難しい部類だ
テトリスを自分で設計して作れたら、VBAを使いこなせるどころか世の中でVBAのプロを自称する連中の中でいきなり上位に入るレベル
それくらいVBAのプロのレベルは低い
つまり何が言いたいかっていうと、テトリスはやりすぎ
家計簿くらい作れたら十分面接でドヤっていいよ
0050デフォルトの名無しさん
垢版 |
2018/09/15(土) 20:11:22.09ID:qQRjJW7l
>>48
どういういみかもう少し噛み砕いてほしい
私よく意味はわかってないけど今まさに同じ道を辿ろうとしてるような気がする
0051デフォルトの名無しさん
垢版 |
2018/09/15(土) 20:13:33.91ID:kEjGAf/G
多数ユーザー向けにマクロを配布するならもうアドインにした方がいいよな
で、データの方はプログラムとのやりとりに支障が出ないようテーブル名、スキーマ、データフォーマットを固定したソースファイルに別途保存させる方がいい
0052デフォルトの名無しさん
垢版 |
2018/09/15(土) 20:52:56.93ID:CRrc/VBu
アドインやCOMアドインのベンダーにインターンで行ったが、VBAどころか、C++でガリガリ開発するスーパープログラマが何人もいて、速攻で就職先から外したわ
0054デフォルトの名無しさん
垢版 |
2018/09/15(土) 21:16:07.93ID:KIanXBkQ
C++でガリガリ開発しててもなんとも思わない

VBやウンコスクリプトでガリガリ開発してるのは
サルがオナニーしてるようにみえる
もしくは奴隷が単調な動作を繰り返してるようにみえる
0055デフォルトの名無しさん
垢版 |
2018/09/15(土) 21:19:37.63ID:CRrc/VBu
>>52
取っつきにくさでいうと、すでに子供の頃から馴染んでおかなければならないイメージ

俺みたいに遅蒔きで大学に入ってC++を初めてさわったレベルでは追い付けないな、と思った

きっかけは分析ツールみたいなアドインってどう作るのか知りたかったという位、その程度の熱意じゃ無理
0057デフォルトの名無しさん
垢版 |
2018/09/15(土) 21:52:32.87ID:wUMJLM3O
VBAのほうが文法、ライブラリ、コミュニティレベルがお粗末だから難しいかな
モダンC++は昔とくらべてびっくりするぐらい生産性高いからね
0059デフォルトの名無しさん
垢版 |
2018/09/15(土) 21:59:21.10ID:XNrqFkTO
セル内に
"aiueo"
とか
≪aiueo≫
が格納されていたとして、
囲い文字だけを抽出するにはどうすればいいですか?

"aiueo"の場合は、全部半角なので、配列に代入して、配列の先頭と末尾を参照すればいいのだが、
≪aiueo≫の場合、全角・半角の区別がつかないので(どちらでもない?)、どうやればいいのか。
0061デフォルトの名無しさん
垢版 |
2018/09/15(土) 22:18:05.27ID:KIanXBkQ
  A         B 
1 "aiueo" =(LEFT(A1,1))&(RIGHT(A1, 1)) ⇒ ""
2 ≪aiueo≫ =(LEFT(A2,1))&(RIGHT(A2, 1)) ⇒ ≪≫

オレならVBAなんか使わずにこうする
0062デフォルトの名無しさん
垢版 |
2018/09/15(土) 22:28:08.97ID:XNrqFkTO
>>60
正規表現を使う場合
@事前に囲い文字を把握しておく
Aコード内では、囲い文字をキーにgrep
Bgrepの結果から、先頭/末尾に囲い文字が含まれていれば確定。
という流れですか?
0063デフォルトの名無しさん
垢版 |
2018/09/15(土) 22:34:12.08ID:kEjGAf/G
>>59
正規表現使えば何とかなるよ
基本的には、aiueoが見つかった場合に見つかった文字列の開始位置と終端位置からそれぞれ一文字分外側にオフセットさせた文字列を取ればいい

"aiueo"のようにaiueoの中に2バイト文字が混在してる場合も抽出しなきゃならないような特殊な場合は文字列の範囲指定がちょっと面倒かもしれないが
0064デフォルトの名無しさん
垢版 |
2018/09/15(土) 22:37:58.41ID:XNrqFkTO
>>61
これ使えるね
全角の<、半角の<に入れ替えても、ちゃんと囲い文字だけを抽出してくれてる。。
0066デフォルトの名無しさん
垢版 |
2018/09/15(土) 22:46:04.69ID:JpPL0LlT
>>62
囲い文字以外を置き換えで消しちゃえばいいんじゃね
検索文字列は"[^\(\)\[\]\"\'「」『』《》]"みたいな感じで
最初の一文字と最後の一文字取るだけならもっとスマートに出来るけど囲い文字が無い場合は括弧以外を抽出しちゃうし
0067デフォルトの名無しさん
垢版 |
2018/09/15(土) 22:51:05.07ID:h6vRwHat
LENBなどB付き関数を使わない限り、半角全角は考える必要ないだろ?Excelは内部では全部Unicodeで扱ってる
0068デフォルトの名無しさん
垢版 |
2018/09/15(土) 23:14:10.61ID:VdLZkjGs
テトリスなんか複雑すぎて、VBA の奴に作れるわけないだろw

回転もあるし、壁にめり込んだり、
そもそも1秒に10回でも、描画できるか?

そんな性能あるか?
0069デフォルトの名無しさん
垢版 |
2018/09/15(土) 23:15:54.34ID:8rxpHkWL
一秒に1回しか動かんのになんで10回も描画せなあかんねんw
0070デフォルトの名無しさん
垢版 |
2018/09/15(土) 23:18:58.10ID:h6vRwHat
回転は最低3回/秒位必要だろうし、落ち速度が速くならないテトリスじゃかたておちだろ
0071デフォルトの名無しさん
垢版 |
2018/09/15(土) 23:35:07.83ID:XNrqFkTO
>>62
>@事前に囲い文字を把握しておく
で、囲い文字があるかないか、事前に分類しておく
分類後、囲い文字があるものに対して、
vbaを使わずにleft、rightを使って抽出。

これで囲い文字の種類を全部押さえていることになる。
後は、コード内で正規表現(grep)使ってうまくやればなんとかなりそう。
0072デフォルトの名無しさん
垢版 |
2018/09/16(日) 00:44:02.64ID:sPpLNVSR
ちょっとよくわからんのだけど
"aiueo≫
とか
≪"aiueo"
とか
≪"aiueo≫ "
はエラーとして除外するの?
0073デフォルトの名無しさん
垢版 |
2018/09/16(日) 01:22:34.32ID:k7pdoQET
>>72
エラーとして除外する。
0074デフォルトの名無しさん
垢版 |
2018/09/16(日) 02:44:47.45ID:BKY25fNA
>>47
VBAテトリスって余興みたいなものだから

応用力を見る題材というならたとえば
在庫や売上の情報から在庫切れや長期在庫
利益率ランキングを算出するとか
株式情報から各種指標を算出するとか
そういうのがビジネス寄りで適切だと思う

>>49
テトリス自体はそんな難しくない
しいていえばゲームは全部GUIに依存するから
その部分が複雑になりがちなだけ
0075デフォルトの名無しさん
垢版 |
2018/09/16(日) 02:48:34.41ID:BKY25fNA
>>48
>一つのExcelファイルに
> プログラム
> 設定データ
> 蓄積データ
>をまとめるのはやめとけって忠告したのに

分かる
要はハードコーディングでしょ
0076デフォルトの名無しさん
垢版 |
2018/09/16(日) 02:51:31.52ID:BKY25fNA
>>59
正規表現がプログラミングの正攻法

なお「<a><b>c</b></a>」
こういうタグの入れ子構造は
正規表現で処理するのは難しい
0078デフォルトの名無しさん
垢版 |
2018/09/16(日) 09:28:10.74ID:e7XchwPX
VBAを使いこなしたいとは思っているようだけど、「事務処理に使う」とは言ってないのでは。
俺はそのままやってみたらいいと思ってる。Excel VBAでアニメーション作った動画とかもポロポロあるわけだし。
https://twitter.com/excelprog/status/993022444221808640とか)
目標が分からないし、何をやりたいにせよ好奇心を止めることはできないし。
https://twitter.com/5chan_nel (5ch newer account)
0079デフォルトの名無しさん
垢版 |
2018/09/16(日) 10:51:52.18ID:SnNXv25N
実用性で言ったら他の言語を使えばいいじゃんってなるから
こうやってVBAを使うことそのものを目的にして遊ぶのは悪くないと思う
0082デフォルトの名無しさん
垢版 |
2018/09/16(日) 12:38:30.87ID:eHdm07t1
JavaのAPI仕様みたいな、VBAのプロパティやメソッドが一覧になってるサイトや書籍てありますか?
他人のソース読むとき、公式のやつが英語のみで辛いんです……
0083デフォルトの名無しさん
垢版 |
2018/09/16(日) 14:28:02.06ID:gTaOdbFs
>>47
ゲームを題材にするならRPGが最適じゃないかな
RPGならデータをこねくり回すしExcelVBAの勉強には良さそうだが

キャラや地図のデータをワークシートに保存して
VBAでそれにアクセスしながらゲームを進行させる感じで
0085デフォルトの名無しさん
垢版 |
2018/09/16(日) 20:14:07.75ID:BKY25fNA
そもそもVBAはアクションゲームに向かないんだよ
もう技術がある人がそれを承知で芸をやるのは良いけど
実用にしたいならビジネス用の題材を取った方が良い
0086デフォルトの名無しさん
垢版 |
2018/09/16(日) 20:17:15.86ID:BKY25fNA
>>83
RRGはテトリスよりは題材としてマシだと思う
ドラクエみたいな普通のGUIのRPGを
エクセル方眼紙で再現するとかだと筋悪いけど

そうじゃなくてCUIのRPGで
アイテムとかデータ構造の構築と管理を中心に組めば
ビジネスにも応用が利くと思う
0087デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:26:15.56ID:k7pdoQET
csvファイルがあって、これをexcelに読みおませると
表が崩れてしまう。

csvの中身
--
1,my name is taro
2,hello,world
--
excelに読み込ませると以下のように表が崩れてしまう。
A B C
1 1 my name is taro
2 2 hello world

期待値は、hello,worldをコンマ(,)で区切らず、B1セル内に格納したい。

まずvbaを使わずになんとかできない?
0088デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:29:05.54ID:k7pdoQET
>>83
確かにRPGのほうがワークシートの保存とかデータ構造の管理とか色々関わってくるのでテトリスよりは題材としてマシなレベルですね
0089デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:31:24.63ID:k7pdoQET
87ですが、vbaで加工しないといけない場合、どういった整形処理が考えられますか?
0090デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:31:41.83ID:sPpLNVSR
>>87
CSVの意味わかってる?
0091デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:33:00.45ID:e7XchwPX
>>87
CSVデータの仕様が悪い気がする。
カンマを含むデータならダブルクォーテーション""で括られているべき。
0092デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:36:22.33ID:k7pdoQET
>>90
CSV(コンマで区切って表示するもの)なので、
hello,world→helloとworldに分割されるのは当然と言えば当然ですが、、。
0093デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:40:43.38ID:SOVIz+sV
逆だ
CSVはこうしたほうがいいというメモを
無視してるのはキミラ低学歴知恵遅れなワケ

カンマか改行かダブルクォーテーションが項目に含まれる場合
ダブルクォーテーションでくくるべきだ
さらにダブルクォーテーションが含まれる場合、
2個のダブルクォーテーションでエスケープするべきだ

https://tools.ietf.org/html/rfc4180

6. Fields containing line breaks (CRLF), double quotes, and commas
should be enclosed in double-quotes. For example:

"aaa","b CRLF
bb","ccc" CRLF
zzz,yyy,xxx

わかった?
0094デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:45:22.98ID:e7XchwPX
>>92
1,my name is taro
2,hello,world

1,"my name is taro"
2,"hello,world"
※my name is taroは括られている必要はないが、統一した方が良い
0095デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:45:42.24ID:sPpLNVSR
>>87
そもそも何がしたいのか?
1列目:ナンバー
2列目:内容
という固定フォーマットで区切りがカンマだってならそのように分解すればいい。
InStrで最初のコンマを探せばいいだろうよ。
0096デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:45:49.49ID:k7pdoQET
>>93
つまり、CSVデータの仕様が悪いので、これ作った人になんとかしろというしかないか。
0097デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:48:00.44ID:e7XchwPX
>>96
カラム数が一定かつ「hello,world」なカラムが一つしかないなら、泥臭いやり方で直すことはできなくもない。
0098デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:52:12.15ID:T59P/aqG
>>96
はっきり言ってCSVデータとして「壊れてる」

というかどのカンマが残ってどのカンマが区切りなのか
理論的に説明できないならVBAだろうと無理
0099デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:53:10.26ID:SHD7Rtu/
VBAでダメならPowerShellの出番だな
0100デフォルトの名無しさん
垢版 |
2018/09/16(日) 21:54:27.21ID:SOVIz+sV
仕様はまったく悪くない
適切に読み込める
普通に矛盾なく読み込めるようになってる
ちゃんと読み込めないのは頭悪いから
自分が頭悪いのを棚にあげるのはよくない

A  B  C     D                E 
AHO " hoge,huga boo CRLF foo CRLF woo BAKA
baka



AHO,"""","hoge,huga","boo CRLF foo CRLF woo",BAKA crlf
baka

この形式で出力されてないデータはそもそもcsvじゃない
■ このスレッドは過去ログ倉庫に格納されています