Excel VBA 質問スレ Part57
■ このスレッドは過去ログ倉庫に格納されています
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part56
http://mevius.5ch.net/test/read.cgi/tech/1534976724/ このスレも相手の居ない淋しいプログラマの愚痴で埋まります 「ここなら俺でもマウントとれるだろう」
と他所では負けっぱなしの奴らが集まってくる。 Excel VBAに関する疑問を抱いて訪れた人がVBAerの惨状を垣間見て、人生に関する疑問を得て帰る
ここはそんなスレ Dictionaryのキーと要素の静的型情報がどうしても消えてしまうのですがバグでしょうか? System.Collection.Hashtableと使い分けるのがよろしいかと >>9
VBAから使えるの?
俺はひとつ覚えでdictionaryだわ System.Collection配下のHashtable、ArrayListがVBAで使えるのは知ってる >>15
ドトネトーのmscorlibはcomがあるんよ
CreateObjectでインスタンス化できる
参照設定でmscorlib.dllを読み込めば型指定できる hashtableとdictionaryはあるけど、hashmapはなかった希ガス excel vbaって、変数を日本語で定義することができるんだな
感動した 配列多用してプログラ厶書いたけどコレvbaしか出来ない事務レベルのやつは内容分かるんだろうか
職場では似非プログラマの自分とその他しかいないのでメンテ出来なくなりそう コメント入れる前に整理してくれ
汚いコードのコメントは汚くて結局わかりにくいままになるぞ >>20
主な操作対象が配列なのだったらむしろ分かりやすいのでは? VBAをやっとこさいじれます、っていう感じの人には配列の理解は厳しいぞ
配列のサブスクリプト、コレクションのインデックス、ハッシュテーブルのキーの相互の違いが分からなかったりするからな 配列の解説書をコメントに書いとく。
具体例を豊富に。 まぁなんでもそうだろうと思うけど、判る人間には判らない人間がなぜ判らないのかが判らない w いや配列は分かるのかもしれん
ただプロシージャさえ使わず変数名にaとかbとか付けてたりで数百行書いてるようなマクロが散見されるほどうちのレベルは低いからちょっと不安 変数が分かるんなら配列も分かりそうだけど、そんなに難しいかな?
「配列っていうものもあるんだなー」程度でも認識さえしていれば、
むしろ配列しか使ってないコードならそのうち理解してくれそうな気がする。
途中でコレクションとか辞書とかヘンなオブジェクトとか自作クラスとか使ってなければ。タブン。 よく考えたら、コードの読みやすさは「何を使うか」より「どう書くか」の方が重要な気がする。
ともあれ、職場に何人かVBAが書ける人がいるようだから(非常に素晴らしいことに)、
適当に何人かひっ捕まえて使わせてみて率直な感想を言ってもらうといいんじゃなかろうか。 Worksheet.CellsとかRange.Offsetとか、引数に二次元配列をとるアクセサを使えない人は結構いる印象だよな 配列の難しさがわからんのは配列すらわかっとらん証拠やぞプロさん達w >>32
どんなデータ構造にもそれなりに難しい点はある、と言われればそうだが、
配列で難しい点を具体的になにか挙げないと意味ないぞ。 >>33
意味がない、ではなくおまえには意味がわからんのやろ
知ったことかそんなもんw甘ったれんなカスw excel vbaでテトリスとか作れるようになると、excel vbaを使いこなせられるようになったと思っていい? >>37
いくない、Excelはゲーム作成用ツールじゃない >>37
いいんじゃね
テトリスができるようになれば次の課題が見えてくると思う テトリス作れるレベルならそこらへんの私VBA得意ですドヤよりスキル的に遥かに上だから、
VBAらしく事務処理の自動化をやるくらい楽勝だよ テトリス作る時間に他の勉強をするべき。
そこまで求められてないから無駄。 >>37
字面だけでいえば、「Excel VBAでテトリスが作れるレベル」なら、「Excel VBAはそれなりに使いこなせる」と言える。
ただ、それを訊いて何をしようとしているのか分からない。内容次第ではおすすめしない。 それなりというか世の中の自称VBAのプロのほとんど全員より上だろう
それ以上の人はVBAできますなんて恥ずかしくて言わない エクセルVBAでテトリス作るのは芸ではあるけど実用的じゃない
どうせならエクセルで機械学習とか実務に使う余地があるものやれば プログラマはVBAできます
なんてわざわざ言わない
他言語ができればできて当たり前だから >>43
vbaを使いこなせられるというか、これが作れるようになれば、この先いろんなツールをつくろうが、
応用がきくという意味で、テトリスという題材を選んでみた。
俺、間違ってることいってる?
vba使いこなせられるになる基準として、何かこういうの作ってみろ的なことがあればいってほしい。 散らばった支社にプログラムを配るにしても、
完璧にシステム仕様が決まっていて、テストも十分終えたもの以外は、一つのExcelファイルに
プログラム
設定データ
蓄積データ
をまとめるのはやめとけって忠告したのに・・・。
プログラムのバグ修正のたびに、支社の端末を直接操作しているVBAマスターを自称する後輩が・・・。
土日ももう呼び出し呼び出し。完全に病んでしまった。
あれほど忠告したのに・・・。
安易な作りでデータ等々を抱えると、プログラムの修正だけしたくても、簡単にはいかないから、
せめて蓄積データだけは別のエクセルファイルなりに保存して開いて使うなりの仕様にしとけと・・・。 >>47
勘違いしてるようだが、テトリスはプログラミングの練習ネタとしてはかなり難しい部類だ
テトリスを自分で設計して作れたら、VBAを使いこなせるどころか世の中でVBAのプロを自称する連中の中でいきなり上位に入るレベル
それくらいVBAのプロのレベルは低い
つまり何が言いたいかっていうと、テトリスはやりすぎ
家計簿くらい作れたら十分面接でドヤっていいよ >>48
どういういみかもう少し噛み砕いてほしい
私よく意味はわかってないけど今まさに同じ道を辿ろうとしてるような気がする 多数ユーザー向けにマクロを配布するならもうアドインにした方がいいよな
で、データの方はプログラムとのやりとりに支障が出ないようテーブル名、スキーマ、データフォーマットを固定したソースファイルに別途保存させる方がいい アドインやCOMアドインのベンダーにインターンで行ったが、VBAどころか、C++でガリガリ開発するスーパープログラマが何人もいて、速攻で就職先から外したわ C++でガリガリ開発しててもなんとも思わない
VBやウンコスクリプトでガリガリ開発してるのは
サルがオナニーしてるようにみえる
もしくは奴隷が単調な動作を繰り返してるようにみえる >>52
取っつきにくさでいうと、すでに子供の頃から馴染んでおかなければならないイメージ
俺みたいに遅蒔きで大学に入ってC++を初めてさわったレベルでは追い付けないな、と思った
きっかけは分析ツールみたいなアドインってどう作るのか知りたかったという位、その程度の熱意じゃ無理 VBAのほうが文法、ライブラリ、コミュニティレベルがお粗末だから難しいかな
モダンC++は昔とくらべてびっくりするぐらい生産性高いからね >>48
アマチュアの限界が来たんだね
後はプロに引き継ぎなさい セル内に
"aiueo"
とか
≪aiueo≫
が格納されていたとして、
囲い文字だけを抽出するにはどうすればいいですか?
"aiueo"の場合は、全部半角なので、配列に代入して、配列の先頭と末尾を参照すればいいのだが、
≪aiueo≫の場合、全角・半角の区別がつかないので(どちらでもない?)、どうやればいいのか。 >>59
まともなプログラマなら正規表現を使う
VBA厨止まりでいいならLeftとRightを使う A B
1 "aiueo" =(LEFT(A1,1))&(RIGHT(A1, 1)) ⇒ ""
2 ≪aiueo≫ =(LEFT(A2,1))&(RIGHT(A2, 1)) ⇒ ≪≫
オレならVBAなんか使わずにこうする >>60
正規表現を使う場合
@事前に囲い文字を把握しておく
Aコード内では、囲い文字をキーにgrep
Bgrepの結果から、先頭/末尾に囲い文字が含まれていれば確定。
という流れですか? >>59
正規表現使えば何とかなるよ
基本的には、aiueoが見つかった場合に見つかった文字列の開始位置と終端位置からそれぞれ一文字分外側にオフセットさせた文字列を取ればいい
"aiueo"のようにaiueoの中に2バイト文字が混在してる場合も抽出しなきゃならないような特殊な場合は文字列の範囲指定がちょっと面倒かもしれないが >>61
これ使えるね
全角の<、半角の<に入れ替えても、ちゃんと囲い文字だけを抽出してくれてる。。 >>62
囲い文字以外を置き換えで消しちゃえばいいんじゃね
検索文字列は"[^\(\)\[\]\"\'「」『』《》]"みたいな感じで
最初の一文字と最後の一文字取るだけならもっとスマートに出来るけど囲い文字が無い場合は括弧以外を抽出しちゃうし LENBなどB付き関数を使わない限り、半角全角は考える必要ないだろ?Excelは内部では全部Unicodeで扱ってる テトリスなんか複雑すぎて、VBA の奴に作れるわけないだろw
回転もあるし、壁にめり込んだり、
そもそも1秒に10回でも、描画できるか?
そんな性能あるか? 一秒に1回しか動かんのになんで10回も描画せなあかんねんw 回転は最低3回/秒位必要だろうし、落ち速度が速くならないテトリスじゃかたておちだろ >>62
>@事前に囲い文字を把握しておく
で、囲い文字があるかないか、事前に分類しておく
分類後、囲い文字があるものに対して、
vbaを使わずにleft、rightを使って抽出。
これで囲い文字の種類を全部押さえていることになる。
後は、コード内で正規表現(grep)使ってうまくやればなんとかなりそう。 ちょっとよくわからんのだけど
"aiueo≫
とか
≪"aiueo"
とか
≪"aiueo≫ "
はエラーとして除外するの? >>47
VBAテトリスって余興みたいなものだから
応用力を見る題材というならたとえば
在庫や売上の情報から在庫切れや長期在庫
利益率ランキングを算出するとか
株式情報から各種指標を算出するとか
そういうのがビジネス寄りで適切だと思う
>>49
テトリス自体はそんな難しくない
しいていえばゲームは全部GUIに依存するから
その部分が複雑になりがちなだけ >>48
>一つのExcelファイルに
> プログラム
> 設定データ
> 蓄積データ
>をまとめるのはやめとけって忠告したのに
分かる
要はハードコーディングでしょ >>59
正規表現がプログラミングの正攻法
なお「<a><b>c</b></a>」
こういうタグの入れ子構造は
正規表現で処理するのは難しい ゲーム作れるから事務処理作れるっていう発想が実務浅いんだろうな VBAを使いこなしたいとは思っているようだけど、「事務処理に使う」とは言ってないのでは。
俺はそのままやってみたらいいと思ってる。Excel VBAでアニメーション作った動画とかもポロポロあるわけだし。
(https://twitter.com/excelprog/status/993022444221808640とか)
目標が分からないし、何をやりたいにせよ好奇心を止めることはできないし。
https://twitter.com/5chan_nel (5ch newer account) 実用性で言ったら他の言語を使えばいいじゃんってなるから
こうやってVBAを使うことそのものを目的にして遊ぶのは悪くないと思う >>68
テトリスってそんなに複雑か?
ゲームの中では簡単に制作できるほうだろ JavaのAPI仕様みたいな、VBAのプロパティやメソッドが一覧になってるサイトや書籍てありますか?
他人のソース読むとき、公式のやつが英語のみで辛いんです…… >>47
ゲームを題材にするならRPGが最適じゃないかな
RPGならデータをこねくり回すしExcelVBAの勉強には良さそうだが
キャラや地図のデータをワークシートに保存して
VBAでそれにアクセスしながらゲームを進行させる感じで VBAマリオだってあるんだし
作ろうと思えば、ある程度までは可能だろう そもそもVBAはアクションゲームに向かないんだよ
もう技術がある人がそれを承知で芸をやるのは良いけど
実用にしたいならビジネス用の題材を取った方が良い >>83
RRGはテトリスよりは題材としてマシだと思う
ドラクエみたいな普通のGUIのRPGを
エクセル方眼紙で再現するとかだと筋悪いけど
そうじゃなくてCUIのRPGで
アイテムとかデータ構造の構築と管理を中心に組めば
ビジネスにも応用が利くと思う 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を使わずになんとかできない? >>83
確かにRPGのほうがワークシートの保存とかデータ構造の管理とか色々関わってくるのでテトリスよりは題材としてマシなレベルですね 87ですが、vbaで加工しないといけない場合、どういった整形処理が考えられますか? >>87
CSVデータの仕様が悪い気がする。
カンマを含むデータならダブルクォーテーション""で括られているべき。 >>90
CSV(コンマで区切って表示するもの)なので、
hello,world→helloとworldに分割されるのは当然と言えば当然ですが、、。 逆だ
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
わかった? >>92
1,my name is taro
2,hello,world
↓
1,"my name is taro"
2,"hello,world"
※my name is taroは括られている必要はないが、統一した方が良い >>87
そもそも何がしたいのか?
1列目:ナンバー
2列目:内容
という固定フォーマットで区切りがカンマだってならそのように分解すればいい。
InStrで最初のコンマを探せばいいだろうよ。 >>93
つまり、CSVデータの仕様が悪いので、これ作った人になんとかしろというしかないか。 >>96
カラム数が一定かつ「hello,world」なカラムが一つしかないなら、泥臭いやり方で直すことはできなくもない。 >>96
はっきり言ってCSVデータとして「壊れてる」
というかどのカンマが残ってどのカンマが区切りなのか
理論的に説明できないならVBAだろうと無理 仕様はまったく悪くない
適切に読み込める
普通に矛盾なく読み込めるようになってる
ちゃんと読み込めないのは頭悪いから
自分が頭悪いのを棚にあげるのはよくない
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じゃない ■ このスレッドは過去ログ倉庫に格納されています