Excel VBA 質問スレ Part52
レス数が1000を超えています。これ以上書き込みはできません。
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
※前スレ
Excel VBA 質問スレ Part51
http://mevius.2ch.net/test/read.cgi/tech/1510107990/ >>898
下手な回答を書かれると第3者が参考にしてしまう。 >>864
同一EXCELアプリケーション内でも良いので教えていただけますか
>>876
Activeではないシートの選択範囲を取得するには、どのように記録を取ればいいでしょうか >>900
頭がおかしくて草
そんなもん参考にする奴の責任だろw >>901
やったことがないけど、ワークブックオブジェクト変数を使えばできるかな。 ちょっと教えて下さい
列挙型の項目に数字が先頭に来ると表示が変になるのですが、なんとかなりますか? 何がどうなってるか具体的な事一切説明せずにおかしい!おかしい!って言うのがこのスレの質問者のデフォ w >>901
アクティブなシートをコードで切り替えていけばSelectionで取れる
たとえば
Workbooks("Book1.xlsx").Worksheets(1).Activate
Debug.Print Selection.Address
Workbooks("Book2.xlsm").Worksheets(2).Activate
Debug.Print Selection.Address
これで両方ブックの選択中のセルアドレスが出力されるはず
選択範囲という概念はActivateされているシートにしかないので
これ以外の方法でやるなら>>863のようにどっかに書き出しておく必要があると思われる >>906
それだとAddressプロパティを持たないオブジェクトがSelectされてるときにエラーにならないか?
TypeName(Selection)で"Range"が返ってきたときだけ番地を拾うようにするとか、Shapeオブジェクトの場合はTopLeftCell.Addessを拾うようにするとか >>907
たとえばーなので、あとは>>862の好きにしてってことで
そもそも2つブックを開いてセルを選択するという操作を人間がやる必要性があるのか
自分だったらそこも自動化したいと思いましたとさ 興味本位で触り始めて面白かったから本腰入れて勉強してるんだが
教本レベルから実務までのハードルが結構高いな
これ、基本的なコード覚えてしまえばほとんどパズルだよね?
上手になるとまた別の見え方ができるんかね >>908
ありがとうございます。
ひとまず、ワークブック切り替えで対応してみます。 >>909
実務レベルで使えるようになってから自分で作ったプログラムを見てみると確かに基本的なコードや基本的なアルゴリズムのパズルでしかないと思えるが、教本を読まないとコードが書けない初心者のうちからそのように侮っていても実務レベルに到達することはない
パズルの組み方そのものが問題になるからだ
実務で行いたい処理があるという前提で、そのためにVBAで実現する機能はどのようなものか、どのようなコードを書けば安全かつ確実に期待通りの機能を実現できるか、というベクトルの思考を繰り返して試行錯誤する以外に近道はないぞ 現在、入力ファイルAの体裁を整えてファイルBとして出力するツールをVBAで作成しています。
その中で、入力ファイルAではS-JISになっている文字コードを出力ファイルBではJISにしてほしいと頼まれています。(先方でのファイル取り込み時の都合のようです。)
自分で調べたところ、文字列を1文字ずつVBAのAsc関数でS-JISコード(10進数)にして、さらにHex関数によりS-JISコード(16進数)に変換するところまではたどり着きました。
さらに、ここからS-JISコード→JISコード変換のアルゴリズムに当てはめればJISコード(16進数)までは取得できると思います。
そこで質問なのですが、JISコード(16進数)から日本語文字列を復元する方法はあるのでしょうか?
Chr関数ではS-JISコード(10進数)には対応していてもJISコードには対応していない?ようでした >>912
16ビットのJISコードに変換したら上位8ビットと下位8ビットに分けてChrB関数で1バイトずつ出力すればいい >>912
文字コードなんか自分で変換するより既製品を使った方が早いよ
変換ツールや変換関数は無数に公開されてる >>913
そうなんですか?不勉強でした
>>914
ありがとうございます
今日はもう帰宅してしまったので明日試してみようと思います
>>915
それはそうかもしれないですが、どうせ他にも色々とツールを介して値やフォーマットをいじったりするので、別のツールを使わずについでに直せるならその方が楽だなって思いまして
繰り返し使うものなので、一手間増えるだけでもヒューマンエラーを呼び兼ねませんし Get-Content ./Input.txt -Encoding ([Text.Encoding]::GetEncoding('Shift-JIS')) |
Out-File ./Output.txt -Encoding ([Text.Encoding]::GetEncoding('ISO-2022-JP')) >>916
そのひと手間のヒューマンエラーよりお前さんがバグを作り込む確率の方が高いと思われ >>912
なんでADODB.Stream使わないのか理解に苦しむ 日本語の方言の違いなんて、自分で調べられない
Ruby を使え >>916
そもそもなぜExcel VBAでやるのか? PowerShellなら1行で終わり
VBAは金とって無駄ばかりなんだから参っちゃうよ ちょっと待てオイ、kanjiコード変換機能ぐらい標準で提供されていないのか。
何かの参照を有効にする程度で実現できないと、VBA、幾らなんでも使えないんじゃ。 VBAは子供のオモチャ
幸い日本のビジネスマンは子供レベルしかいないので重宝されてる 日頃の鬱憤を「VBA使えない」と喚くことでしか発散できないってのもなかなか可哀想だなw
本当に使えなかったら普及してないんだけどそこまで頭回らない辺りが不憫 使える・使えないが普及率に直結するとか世界観チープすぎるだろ
VBAはチープな言語だからお似合いっちゃそうだが 「直結する」なんて言ってないんだけどw
お人形遊びが好きだねぇ図星を疲れたのがそんなに悔しかったんだな >>919>>928
ありがとうございます
ADODB.streamを調べていて気になったことがあったので重ねて質問させてください
いくつかのウェブページを見たところ、ADODAを利用するときには参照設定Microsoft ActiveX Data Objects 2.8をチェックしろと書いているページがいくつかありました(書いてないページもありました)
自環境で試したところ、特にチェックしなくてもADODB.streamは動作するみたいなんですが、この参照設定はどういうためのものなんでしょうか? >>931
煽るならせめておのれのスペルチェックぐらいしろ、と
あんたのインテリセンスを疑うぞ、と
見たり読んだりする前に、指が違和感感じねえの?
フィジカルセンスも疑っとけよ >>932
Object型で使うなら参照設定はいらない
その代わりエディタの補完機能は使えないけど、動作に支障はない >>934
あー、そういうことなんですね
ありがとうございます
スッキリしました VBAでHTMLに入っているJavaScriptのオンクリックを配列に入れたいのですがヒントを下さい >>933
タイポ指摘でドヤ顔って子供でも恥ずかしくてできないことをようやるねぇ >>909
亀レスだけど、多分最初に「何言ってたんだろ俺・・・」となって
その後しばらく続けた後に
「あれ?パズルって違った意味で正しいじゃん」ってなって
更に少ししてから
「最初に言った意味と後で考えた意味って違うと思ってたけど実は根本は同じだったんだ。
やっぱり俺は正しかったんだ!!」
・・・ってなると思う。多分。
君の言ってることは正しいから
そのままの考えでやって行けばいいと思うよ。 発言をリファクタしたいが
そもそも意図がわからない
まさにVBAメンタル なぜここにいる者がみなVBA「だけ」やってると思ってるような発言している人がいるんだろう。
何かと便利だからVBA「も」やっている人もいるというところまでの考えに至らないのかな? 何かと便利?
そもそもまずこれVBAじゃなくてよくね?じゃ?
仕方なくVBA使うはめになるんだが おれはここ数年VBAなんてやってないよ
Excelに関する処理はVBSやPS VBAはマジで他になにも使えない厳しい環境にいる人かなんかこじらせた人が使うもの
でも標準でPSあるから他になにも使えない環境ってのは今は滅多にないんだよね PSがVBAより便利とかいうやつはそもそもVBAの用途がわかってないとしか思えん ここはVBAのスレだからVBAの話をするんじゃないのか
別に他の話題を出すなとは言わんが、なんでVBAなの?みたいな話は流石に空気読めてないかと なんでVBAなの?は一つの案としてアドバイスでもあるだろ
100キロの道案内をチャリで行くにはどうしたらいいですか?
って聞いてきたら、まずなんでチャリなの?ってなるやろ 「なんでチャリなの?」をサイクリングスレで言い出すクソバカはどんな脳みそしてるんだって話題でしょ
海を渡りたいとかいう話なら別だけどチャリで行けそうだからチャリの話題を出してるのに
「チャリは疲れるから車で行け」とか「これだからチャリンコ乗りは」とか言い出すのは場違いに決まってるだろ >>927
VBAが普及しているの(か?)なら、その理由は単にExcel付属だから。
VBAが使える言語であるという証左にはならない。
VBS見りゃ分かることだと思うが、そこまで頭回らない辺りが不憫。 >>947
逆だろう
このスレにはVBAの用途がわかってない奴ばっかり
文字コード変換とかバカなことを言い出す >>952
だから全言語を比較検討した結果の使える使えないが普及に直結してるなんて話じゃないし
どんなに否定しようが実務において使えるから普及してんだよ
むしろ碌な知識の無い事務員ですら使える言語が使えないお前の脳みそを嘆け ここに居る奴は賢いのかもしれないが、スレチな役立たずの無能なレスする対人関係拗らせてる奴しか居ないのか… ブックの中に「名簿」と「納付書」というシートがあります。
そして「名簿」シートのF1に数字の1が入っており、A8以降に行番号が入っています。
納付書には名簿F1の値にあわせてVLOOKUP関数で返される値が入るようになっています。
そこで、F1の番号が2ずつ繰り上がるごとにシート「納付書」を印刷し、それをシート名簿のA列の最終行の数字まで繰り返す
(A列の最終行が奇数の場合にはその番号の次の偶数で終わるようにしたい)
というコードを教えてください。
↓のコードだと一つのシート内でしか機能しないです
Sheets("名簿").Select
For i = Range("F1") To Range("F2") - 1 Step 2
Range("F1") = i
ActiveSheet.PrintOut
Next
End Sub >>950
たまにマジで海渡りたいレベルの質問あるやん
仕方ないからフェリーに載せろって言ってもチャリじゃないとか言い出す奴いるし >>956
何ができないって言ってるの?
「納品書」を印刷したいんならActiveSheet.PrintOutの前の行に
Sheets("納品書").Selectとか入れればいいだけに見えるが あとは印刷の次の行にまたSheets("名簿").Selectか >>954
VBAに取り憑かれるとこうなるのかな
どうしてもVBAをイケてるから普及してる言語に認定したいらしい
現実には他の選択肢を調べる発想すらない素人がなんとなくMicrosoftのブランドと簡単って宣伝文句につられて使ってるだけ
そりゃユーザー数だけなら多くなるわな ループ処理で以下のクリップボードに変数を格納する関数を通すと2回目でエラーになってしまいます
原因がわかれば教えてください
関数
Sub clip(strwork As String)
With New MSForms.DataObject
.SetText strwork '変数の値をDataObjectに格納する
.PutInClipboard 'DataObjectのデータをクリップボードに格納する
End With
Exit Sub
End Sub
エラー内容
実行時エラー'-2147221040(800401d0)'
DataObject:PutClipboardOpenClipboardに失敗しました
このあとSetCursorPosとSendKeys "^v"を使ってブラウザ上のテキストに貼り付けしてます
1回目の貼り付け時にブラウザが固まっているのでそれも影響しているかも知れません
よろしくお願いします >>927
あってしかるべき機能がもし無ければ使えない
という文意じゃないか
暴れる前にまず正しい読解から始めよう バカが何をどう言おうが現実にVBAは使えてるし使われてるんだよ
顔真っ赤にしてバカなこと言う前に正しく現実を見るところから始めよう >>958
>>958
ありがとうございます
それと今はF2で最終行を取得していますが、F2をやめて
「A列の最終行まで」処理をする方法もお願いします。 Sheet選択についてSheetが7つあります。
Sheet1/Sheet2/Sheet3/1/2/3/4
Sheet名「1」を選択するためにはこの方法しかないでしょうか?
------------------------
Dim cnt As long
cnt = 1
sheets(”” & cnt & "").select
------------------------
↓これだとSheet1選択
-------------------------
Dim cnt As long
cnt = 1
sheets(cnt).select
------------------------- >>963
お前がな
まあVBAerは一生VBAで無駄な工数払ってればいいよ
まともな人は他の選択肢を見つけるから >>966
まともな人は「VBAで作って」と言われたらVBAで作るんだぜ
しかもPowerShellやらC#やらRubyやらで工数かけた分は依頼者が受け取らないから全部無駄になるんだぜ
今まで知らなかったんだろうけどこれで一つ勉強になったな まともな人はまずVBAでやるべき仕事か判断して別の選択肢も提案するんだよ
言われたことしかできない底辺には難しいかもしれないがビジネスってそういうことなの 近頃やたらとパワー系バカが暴れとるなw
一体どうしたんやコイツw >>968-969
VBAスレでこの意見が通ると思ってるんだからマジ信じられねぇよな
まともじゃないヤツの言う「まとも」を誰が信じるんだよっていう >>965
シートを特定する方法は3つあって
1.オブジェクト名
2.シート名
3.インデックス番号
で、あなたのやり方はシート名
オブジェクト名はVBEで確認できて初期値は追加した順にSheet1〜なので
その場合、 Sheet4.Select でも選択できると思う
オブジェクト名は好きに変えられるので
わかりやすい名前にしとおくと、誰かが勝手にシート名を変えようが
そのオブジェクト名でシートを指定できるのでオススメ
インデックスで指定するなら Sheets(4).select
インデックスは単純に左から数えた順番ね >>965
あと
Dim cnt As String
にして文字列で代入すれば()の中にダブルクォートがいらないから見やすくなるよ
cnt = "1"
Sheets(cnt).Select 別にプロの仕事として使われてる訳ではないと思うけどね、VBA。
Excelの使用頻度が高い事務職とかの人が使うイメージ。
何でもかんでも金払ってシステム化してくれる会社なんて無いし、例え使えたとしても簡単に他の言語の開発環境を手配できる訳でもないし。
powershell推しの人はメモ帳で書いてるの? >>965
要するに数値の 1 から文字列の "1" を作ればいいので >>973 以外にも
sheets(CStr(cnt)).select
とかでもいい
シート名が 0001 0002 ... となってたら
sheets(Format(cnt, "0000")).select
なんてこともできる >>961
Excelからブラウザに値を送りたいだけなら
クリップボードを経由しないでDOMでやるのがいいよ
VBA DOMでググるとたくさん解説があるよ
IE限定なので宗教上の理由がなければだけど >>976
Excelと関係ないことをExcel VBAでやりたいという質問者がいる。
文字コード変換をExcel VBAで自作するので教えてくれという人間に対して、VBAを勧めるのはいくらなんでもおかしいだろ。 実際VBAでもADODB使って数行でできることなのに何をそんな発狂してるんだよ 処理の進捗をテキストボックスに表示する方法なの
ですが何かサンプルはありませんか?
出来れば自動的にスクロールしてくれるといいのですが >>972
>>973
>>979
アドバイス頂き有難う御座います。
他の方法があるのは知らなかった、、、。
勉強不足でした。
m(_ _)m >>980
chomeなんですが別の貼り付け処理にしたらさくさく動きました
ありがとうございます >>983
普通にプログレスバーを使えば良いと思うが
https://e-vba.com/progressbarlabel/
プログレスバーをLabelで作成する方法
とかは? Excel エンジニアは、プログラマーじゃない。
企業内のExcel マクロエンジニア
Excel は、表示とデータが合体しているから、プログラミングが難しい。
Rails などの、MVC みたいに分かれていない
Excel は、データをexport して、Ruby で処理して、import するのが、最も簡単。
これで表示関係なく、ビジネスロジックだけに集中できる
>>976-978
VSCode >>986
もしかしたら
自分の作った処理の進捗をどうやって算出すれば良いですか
という意味の「勝手に計算しろ」的質問かも知らん 進捗の表示で自動スクロールって、処理ログを表示したいって事じゃないのかな
全体像が分からないから提案すら出来ない状況だけど Debug.Printでイミディエイトウィンドウに出力するみたいなことをフォームでやりたいってことじゃろ
このスレ住民の読解力低すぎない?実務でクライアントの意向理解できてるの? >>990
まさにそれです
Debug.print で表示された内容を
テキストボックスに表示させたいです >>987
お前EXCELに何やらせようとしてんの?w
MVCモデルなんてシステム作成するときに使うもんだろ
EXCEL上でデカいシステムでも作るつもりなのかよw
RubyやC#が悪いとは思わんがお前の頭は相当に悪そうだなw >>992
自動的にスクロールは難しそうなので最新の進捗を1行目に追記するようにした方が楽 >>987
プログラマでもなく、マクロエンジニアでもない。
ただの事務職。
関数では面倒な処理をVBAで書くだけだ。 >>993
こういうバカがクソ使いにくいbookを作るんだよなぁ MVCでもMVVMでもなんでもいいけど入出力とデータを分けてくれ
そしてデータを正規化してくれ
VBAerさんはその程度の基本すら出来てない人ばっかりだ
そんなんじゃブック渡された方も迷惑だよ 自分の頭の中にしかいないVBAerとやらの話をここでされてもなぁ レス数が1000を超えています。これ以上書き込みはできません。