Excel VBA 質問スレ Part68
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付ける ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part67 https://mevius.5ch.net/test/read.cgi/tech/1593104489/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured そもそもオブジェクト指定のないCellsがいつでもActiveSheetを参照すると思うなよ シートモジュールに書いたCellsはそのシートを参照するんだぜ VBAというよりVBSかもしれませんが いろいろ試したのですが正規表現の(肯|否)定(先|後)読みに対応していないようなのですが認識に相違ありませんか? また、擬似的に(肯|否)定(先|後)読みに対応させたコードを誰か公開していませんか? >>301 多くのアプリで、正規表現はWindowsに標準で内蔵されてるDLLを使ってる 独自の仕様やバグがあるのは既知だから、それが気に入らない時は別のライブラリを見つけてくるしかない VBSはスレ違いになるんだろうけどさー 今、仕事でそれで書かれたコード見てるんだよねー VB.NetからVBAに戻るとそのインテリセンスの効かなさに辟易するけど VBSで書かれたものはその比じゃないねー 参照もなーんも効かないところに持ってきて インデントも正しく書いてないし 綺麗にスパゲティーコードになってるの見ると 殺意を覚えるわー まぁVBS自体は同じファイルの中に 複数のクラスが書けたりするところは VBAよりいいのかな? 見てるだけで殺意はないだろ 自分で分かりやすく直していけばいい C列に"2007/3/26"などのような書式で年月日が入っていますが それをC=年、D列=月、E列=日にしたいのですが ↓だと年が1905,月が1、日が26日のように変換されてしまいます。 Dim r As Long, dt As date For r = 2 To 435 dt = CDate(cells(r,3)) Cells(r, 3) = Year(dt) Cells(r, 4) = Month(dt) Cells(r, 5) = Day(dt) Next r >>306 最初date型で取ってやれば確か年や月や日を取る関数が有ったと思うよー じゃあねー >>302 私が気に入りそうなものはありますか? 肯定先読み肯定後読み以上に高度な機能は求めていないのですが ていうかそうしてんじゃん 出力先のセルの書式はどうなってるの? コードを見た感じじゃ少なくとも3列目は 日付型みたいだけど >>306 year、month、dayの引数のdtの中身は2007/3/26ではない または3、4、5列目の表示形式をそれぞれy、m、dにしてる >>306 考えなしに書くからセンス皆無なコードだけど3列目の日付が文字列で入ってるならこんなんどうよ Dim Ary(2 to 435,1 to 3) As Long,r As Long, a As String For LBound(Ary,1) to UBound(Ary,1) a = Sheet1.Cells(r,3).Value Ary(r,0) = Split(a,“/“)(0) Ary(r,1) = Split(a,“/“)(1) Ary(r,2) = Split(a,“/“)(2) Next Range(Sheet1.Cells(2,3),Sheet1.Сells(435,5)) = Ary >>306 Sub Macro1() Range("C2:C435").Copy Range("D2:E435").Select ActiveSheet.Paste Range("C2:C435").NumberFormatLocal = "yyyy" Range("D2:D435").NumberFormatLocal = "m" Range("E2:E435").NumberFormatLocal = "d" End Sub >>306 セルに表示されている文字とセルの値は別だって理解が必要 おそらく C列の表示形式が日付になっているが、そこの値を数値の2007にした 数値の2007は日付にすると1905/6/29 その年だけが表示されている 同様に数値の3は1900/1/3、数値の26は1900/1/26 まあ、想定とは違うかもしれんが正しく動いてると思われるな 解決策は、表示したいのは数値なのか日付なのかちゃんと決めて然るべき値と書式を設定しろ つヵ、C列の値でC列に書き換えるとかしないで 元の値を別の列にもっとけば、VBAなしで関数だけで出来るだろうけど C,D,E列に表示させたいのは「数値」であるにも関わらず 「日付」の表示形式になっているからおかしくなる C,D,E列の書式設定→表示形式を日付から標準にする こうするとC列は39167のような形で表示されることになるが お構いなしにマクロを動かせば、意図した通りの動きになる でどう? >>305 理解出来るからこそ腹立たしいこともあるよー 例えばaとbとcってBooleanの変数を定義して a = b = c とか書いてるやつ まぁbとc が同じならaにTrueが、 違えばFalseが入るってことを期待して 書いてるなら見づらいけどまだ許せるよ でもcにbが代入されてそのままaにbが 代入されるとか思って書いてたらしく システムバグらせてそのままにしてたりとか テストどうしてたんだとか思うよねー 正直こんなのに関わりたくないけど 仕事だからやるって感じだねー あ、逆だった bにcが代入されてaにbが代入されると 思ってたらしいってことね まぁこの4日間は連休だし そうじゃなくてもテレワークだから 気楽に適当にやるつもりだよー 仕事の内容でそのソースを直せってことなら書き直せばいいんじゃねーの そのまま残すと後任者に同じように思われるんだぜ >>259 遅くなってしまいましてごめん。自分の欲しかった情報がこれで取れる 事ができました。 ありがと! >>320 その判断は結構難しい。 今動いてるものは、そのままにしておくというのが通常だ。 Accessでレコードセットループで回してる最中にその値でもって別のレコードセット開いたりを7、8回やって10分かけてデータ作ってるプログラムが有るんだけど、コレ、クエリ1つで出来るんじゃね?と思って試しに作ったら一瞬で出来る。 それでも、正式に変更することになるかと言えばならない。 こっちだってその辺は分かってる。 何かの時に、きちんと作り直しましょうという話になるまで置いとくもんで、むしろそんな話にならずにずっ―とそのままというのが殆ど。 >>322 なら > でもcにbが代入されてそのままaにbが > 代入されるとか思って書いてたらしく > システムバグらせてそのままにしてたりとか > テストどうしてたんだとか思うよねー とか書くなよ どうせ盛々で語ってるだけだろw >>322 重要な変更とは別で、こまかい高速化や最適化として変更するんだよ それができないなら他人のコードを悪くいってはいけない そうかーみんなそんな具合に考えてるのかー でも悪いけどその場でチャチャっと直すことはしないよ もちろん上に話を通すのは当然だけど こんなぐちゃぐちゃな行き当たりばったりのコード書いてんだから直すんなら他への影響調査の時間貰う まぁ当たり前だよねー >>324 本人でもないのに > でもcにbが代入されてそのままaにbが > 代入されるとか思って書いてたらしく > システムバグらせてそのままにしてたりとか > テストどうしてたんだとか思うよねー に対して > 今動いてるものは、そのままにしておくというのが通常だ。 って言うの? アホの上塗りにしかなってないけど… w >>319 実際にそういう動きをする言語もあるからな >>325 それは開発方法とフェーズによる いつでも好き勝手コード弄れるような環境ばかりではない まあ、VBAではあまりないだろうけど >>326 お前の会社のレベルが低いだけだろ まあそんな会社にしかいられない自分を省みたほうがいいなw >>329 ふーん そっちの会社ではそういうの見つけたら 調べないでチャチャっと直しちゃうのかー よっぽど優秀なんだねー 俺みたいな無能にはとても怖くて出来ないやーw >>326 お前以外にチャッチャッと直すなんて言ってる奴いないんだけどw レベルの話は > こんなぐちゃぐちゃな行き当たりばったりのコード書いてんだから の部分な >>325 いや、そうじゃなくて… そうか、確かにVBAはそれでメシ食ってる奴は少ないから分からんかもしれんな。 ウォーターフォールでやってて、プロジェクトの目的が決まってるのに、いくら高速化しても余計なことすれば怒られるのが当然なんだよ。 それが原因で不具合が出てみろ。 大変なことになるんだから。 確かに、思いつきでどんどん改変してく仕事も結構やったことある。 >>327 開発全般によくある話として言ったまで。 cとかbとかの話に参加したわけじゃない。 動いてるなら、触らないというのはよくあることだ。 >>328 確かに少ないかもね。 考えてみれば俺も今の職場で初めて。 でも他言語じゃよく聞く話だよな。 >>333 話の流れが読めないバカということはよくわかった どんなに簡単な修正でも、思い込みやミスは誰にでもある うっかりエンバグする可能性があるから、先方から高速化などの要求がない限りは動いてる物を勝手に修正はしないのが基本かなあ >>332 それは逆だ、今のコードが悪いかのを直したせいで不具合がおきるのは直し方が悪いせい 自分できちんと直す能力もない奴が今のコードが悪いとか語るなよ というのは言い過ぎなのかもしれんな、直せる自信がないなら直さないでいいんじゃね 俺から見れば細かい変更もできない人が重要な処理を変更する方が不具合が起きるだろって思うが なんで動いてるものの話になってるのかわからんけど元々の話は > システムバグらせてそのままにしてたりとか > テストどうしてたんだとか思うよねー だから、修正ありきだろ 修正の手順はその組織で違うだろうけど ここの会話見てると仕事してる時に戻ったみたいでイヤになる 技術的に可能(can)なのと プロジェクトとして可能(may)なのはべつだって言ってるんだが VBA使いを悪く言う気はないが まともなプロジェクトでやってないから理解できないんだろうな 内製なら結構気軽に弄るもんだよ 俺は以前はSIにいて今は自社サービス兼社内SEだから両方の立場がわかるけど、 システムって君のような外の人が思ってるほど重要なものでも神聖なものでもない だれも技術的に可能かどうかなんて言ってないのに意味不明なことを言い出してて笑う 企業や仕事がどういうものかを理解していない馬鹿ばっかりで草 自分とか周りの数人しか使わないとかならリファクタリングで弄るケースもあるし全社レベルのシステムとかなら影響調査からってケースもあるわな そのプログラムがおかしくなった時の影響度とかも関係するし 要はケースバイケース >>338 >>339 先のAccessの話なら直せる自信ならある。 というか、ここにいる奴で俺が出来ないんだったら出来る奴はいないと思うぜ。 それぐらい自信ならある。 ただし、まとも奴なら誰でも言うがバグを出さない自信は無い。 ふと、 日本人のできません 韓国人のできます 中国人のできました を信用しちゃダメ って言うのを思い出した… w >>348 だよな、さすがに自分とか周りの数人しか使わないとかなら 時間見て許可取ってリファクタリングするわ 自分が作ったツールやシステムなら空き時間見て少しづつリファクタリングだな さすがに全社レベルのシステムで勝手にリファクタリングはないな そもそも許可取るのが大変 VBAの後継言語がExcelに標準搭載されると知識も勉強時間も無駄になる と考えてしまいVBAの学習が捗らないのですが、どうしたらよいでしょうか 開発する能力と言語の習熟は別と考えた方がいいと思うよ 弘法筆を選ばずって言うし >>352 そんな風に考えたことは無いなあ。 その時に必要だから覚えるんだよ。 VBAなんて勉強するもんじゃなくて使っていくうちにわかるもんだし セルの中身が -------------------------- あああ325gsdsが| aaaojgwe | 33333 | | いいksが | bbb93502g | ^^^^^^^ | | | 888っふぁふぁ | aaawopfjw | f−bgんlsgさ | -------------------------| のような感じの際、「あああ325gsdsが」や「aaaojgwe」のように1行づつ取得する方法はあるでしょうか? セル内の改行コードはCRとLFとCRLFがあるのでどれかに統一して 統一した改行コードでsplitすれば VBAやっててもオブジェクト指向が全然身につかないんだけどどうしよう >>358 セル内の改行はLFだよ。 キーボード入力ならの話だけど。 >>359 VBAとは別にオブジェクト志向に親和性のある言語勉強すれば? それがVBAにも役に立つよ。 >>360 よそからコピペしたりするとLF以外も混じるよ 念のため統一する方が安心 >>359 オブジェクト指向を身につけるためにVBAをやっているのか? >>361 >>363 フローチャートは書けても オブジェクト指向というものがあるということがなんとなく判っていても じゃあオブジェクト指向できっちり設計しようという発想が浮かばないというかまだ怖さがあるんだよね MVCって言葉もネットサーフィンをして先週巡り合ったくらいの素人だから とりあえず新たな設計手法を試そうと思っても 何に手をつければいいかわからん =EVALUATE()を使ったらマクロだよって保存するときに言われた。 見た目関数なのに実はマクロっていうものが他にどんなのがあるか知りたいんだけど、こういうのなんて言うの? 検索ワードが思い付かないんだけど知ってたら教えて。 >>364 いや、VBAはあまりオブジェクト志向とは親和性がないんだよ。 VBAそのものの根幹はオブジェクトそのものを扱うし親和性も有るんだけど、それで何かを作る時には俺はあまりオブジェクト志向で作らないな。 それでも、感覚的にピッタリ来るときもある。 そういう感覚の為にも他言語の経験が役に立つ。 でも、VBAでオブジェクト志向って上級者じゃないとピッタリ来ないんじゃないかな。 そもそもVBAが古いMS-BASICの言語仕様をほとんどそのまま踏襲してるもんだからオブジェクト指向との親和性はあんまり高くない まだVB.netの方が色々やりやすい >>369 セルをアクティブにするとCRでも改行するらしいよ 自分はそういうよくわからない挙動に振り回されたく無いから変換するよ LFとCRLFが混在するのは確かめたよ なので片方に寄せてる CRも混ざる可能性はあるのでついでに処理してるよ >>366 なるほどそうなんですね 別言語で勉強してみます セル内で改行するとlfが入る テキストファイルとかでcrlfで改行されたものをセルにコピペすればcrlfがそのまま貼り付けられるが、lf部分が改行されるだけでcrは無視される もともとマック用のソフトウェアだから、改行コードが揃っていないんだ。 今開いてるエクセル3つを左右で3分割させるマクロとかありますか? あるけど、マクロっていうかWindowsAPIで画面サイズ調整だろうな。 3画面用意する方が楽かも。 Windows.Arrange ArrangeStyle:=xlVertical >>381 ありがとう >>383 本当にありがとう 馬鹿すぎる質問して親切に教えてくれて本当に感謝 教えてくれたコードの方を頂きます 3画面揃ったときについでに分割させたら良い動きしてくれました めちゃくちゃ後付けですみませんが これを一番右でこいつは真ん中とか 任意の配置は流石に無理ですか? 出来そうなら自分でも何とか調べてみます こういう馬鹿の特徴は、少し教えるとつけあがって自分で考えることもせずあれもこれもとねだること 少しは頭を使えよ accdb → 問題なく型指定出来る。 csv → schema.iniで型指定出来る。 自シート → どうすんの? IMEX=1も利いたり効かなかったりで当てにならん。 罫線の所属するセルについて質問です セルの値を条件にして罫線の種類を変えようと考えているのですが、 隣合うセルの境界線はどちらのセルの罫線が優先されて表示されるのでしょうか? よろしくお願いします 後から指定した方だな。 思いっきり拡大すれば、線が2本引いてあるのが見えるのかと思ったが、そんなことはなかった。 ちなみに、ストIIで2人同時に投げ技をかけた場合、どちらが優先されるのかはランダムで50%/50%らしい。 >>390 これ、たしか罫線の種類で、基本ごっつい順に優先順位があったはず ついでに、セルの書式設定で罫線設定すると、隣のセルの罫線設定も消えたり変わったりする 太いほうだった(Excelばーじょん2016) https://i.imgur.com/kfSAyHL.png 印刷境界とかは分けて認識されてるから、なんだかんだ自分のコードを検証したほうがいいな あ、宣言とかしときながらシート指定するん忘れてやがる getElementBy飽きたんだけど、RPA的制御じゃなくて、htttp通信を駆使してどうにかする、みたいのない? APIとか使えない古いシステムに対して。 htttp通信がわからんがセキュリティー的に問題起きるんじゃね htttpは、ハイパー・トンマ・トンチンカン・タコ・( ´,_ゝ`)プッの略かな ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる