!extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑2行に減ってるけど、同じ内容を3行に増やして貼り付けること ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 ※前スレ Excel VBA 質問スレ Part75 http://2chb.net/r/tech/1644384272/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured Excel使い方すらわからない人はお断りです Excel VBAが何かもわからない人もお断りです
>>6 終わってから立てたらスレの連続性が途絶えるだろ 考えて物言え知恵足らずが 過去にもしばらくスレ立て放置プレイされた事あったぜ
よろしくお願いします。以下の日本語で書いた部分に相当するような 繰り返し文ってありますでしょうか。 イメージしているのはwhile read line do done < test.txt みたいなものです。 テキストファイルの変わりに「とある列の値が尽きるまで(空欄が見つかるまで)」、 繰り返し文内の処理を繰り返すような文です。 Range("B1").Select 繰り返し A列の値 = 空欄のセルが見つかるまで ActiveCell.Offset(0, -1).Range("A1").Select Selection.Copy ActiveCell.Offset(0, 1).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(1, 0).Range("A1").Select 繰り返し完了
>>10 すげーざっくりだけどやりたいことはこんな感じ? やりたいことがあってるならもう少しちゃんとしたコードにはするけど SelectとかCopy、Pasteは基本VBAで使わないので Dim WS As WorkSheet Set WS=ActiveSheet Dim RngA1 As Range Set RngA1=WS.Cells(1,1) Dim i As Long For i = 1 to 16384 If WS.Cells(i,1).Value="" Then Exit For Else WS.Cells(i, 1).Value=WS.Cells(i, 2).Value End If Next 先生方教えて! エクセルを1枚1枚開いてvbaによって加工したい場合、 マクロの表示からそのvbaを選ぶのが一般的なんでしょうか。 FileDialogをつかって複数エクセルを一気に加工するほうが 自分は楽なんですが契約社員にはわかりづらいそうで。。
一般的かどうかは分からんけど ファイルダイアログを開いて 設定したパスをどこかのセルに設定しておいて 実行ボタンでそのセルを読みに行くほうが 複数のブックを読みに行く場合には親切
理解が十分でない契約社員には直感的にわかりやすい上記の方法 そのうち慣れて面倒になってきたら下記の方法(バッチ) 2つのアプローチを用意するのがいいかもしれませんね コンピュータになれていなかったり入れ替わりが多い契約社員というところがポイントですね 私もVBAを他人に提供することが多いから参考になるわー
Nextじゃなくて、Next iって書かなきゃあかんと言われたよ
前スレ987で質問した者です。 アドバイスありがとうございます。 2019に変わる際にPCがwin7からwin10に変わり性能もアップしたのでVBA処理も早くなるかと思っていたのですがそのようなバグが出るようになりました。 自分1人で使ってる範囲では良いのですが複数が利用しているため質問させて頂きました。 PC性能があがりEXCELがついてこれてない可能性もありますね。
Excel板なら人間の性能を上げろって揶揄されるからな
win7がwin10になったのとPCの性能は別だからな 古いPCのOSだけ変えたのかもしれんし
説明不足で申し訳ないです。 win7からwin10でPC変わってます。 個人的に所有しているPCではないので具体的なスペックはわかりません。
>>20 所有権の問題ではなく馬鹿だからわからないだけでは? 申し訳ありません、具体的なスペックが提示できないようではアドバイスも難しいですもんね。 これまで頂いたアドバイスでもう少し試行錯誤してみたいと思います。ありがとうございました。
>>23 ありがとうございます。勉強になります。 今のところはエラーが出た際バッファーの時間を調整して対応しています。 とりあえずは動いているので良いのですが書き方としてどうなのだろうと思いまして… もっとスマートに解決方法があればと思い質問させて頂きました。 アドバイス頂きありがとうございます。アドバイスを元に検討してみたいと思います。 >>24 むかしファイルメーカーから画像を取り出してExcelに貼り付けるマクロ書いたことあるわ。 クリップボードからExcelに貼るときにちょいちょいエラーが出て苦労した。 最終的にはエラーが出たところからリランできるようにして人力で最後まで走り切った。 継続的に長い期間使うマクロではなかったんでね。 クリップボードって入れ終わるタイミングが掴めないから処理が難しいね。 オレが調べた限りでは完全に技術的に解決する方法は見つけられなかった。 完全自動化は一旦棚に上げておいて、人間の補助も込みで運用を考えた方が現実的かも。 >>12 VBSでExcelファイルをドラッグドロップお薦め Visible = False でExcel画面すら見ずに処理が終わる >>26 まずIEはセッションなど持っていない。 そして今IE は使えないだろう? 強制的にEdgeにされるはずだ。 そしてそのEdge も当然セッションなど持っていない。 EdgeもIEもクライアントサイドのものだからだ。 セッションはサーバーサイドの概念だからな。 そしてサーバーサイドをEXCELのVBA で制御するとか意味分からん。 大人しくAsp.NetでもやっておくかせめてVBS で制御しとけ。 わざとだろうけど、EdgeでもCookieでもいいよ。
【ひろゆき】テレビ見る奴はバカ!?正論論破! 「テレビ見てる奴バカすぎだろ!!マジでバカしかいない!!」聞けば納得の正論!! 【ひろゆき】みなさん要注意です…テレビ見ると頭悪くなります ⇒テレビが馬鹿向けに作られてる衝撃の理由がヤバ過ぎる… 【ひろゆき】マジで「ざまあみろ」って思いましたね。 ●●する奴にテレビ業界は破壊されました…ひろゆきがテレビがオワコン化した理由を話す 【ひろゆき】芸能界の闇!松本人志とか東野幸治はエクセルすら使えないんだよ? ワイドナショーで言ってたw【教えて!ひろゆき先生/切り抜き】 【ひろゆき】なぜテレビは面白くなくなったのか? その理由をひろゆきとひげおやじが分析する【切り抜き/論破/TV】
Sub test() Dim high As Long Dim str As String Dim num As Integer 'a str = "転" str = Asc(str) str = Hex(str) a = str 'b str = "転" str = Hex(Asc(str)) b = str 'c str = "転" num = Asc(str) str = Hex(num) c = str End Sub a=FFFFFFFFFFFF935D b =935D c=935D aとbで結果が異なる理由が分かりません。 cはぼんやりと型の違いなのかと思いテストしたところ、bと同じ結果になりました。 しかし、aもbもstring型のstrに納めているので、「どうして結果が違うのか」とより 謎を強めてしまいました。なぜ、aとbで結果が異なるのか教えてください。
ascの結果をstringに変換しないで入れたからかな 出先なので試せないが
'a str = "転" str = Asc(str) Debug.Print str str = Hex(str) Debug.Print str a = str ってやってみて自分の思った通りになってるか確認してみそ
>>32 Asc関数は戻り値が数値型なので、bとcはほぼ同等になる aだけが途中経過が明らかに違う 暗黙の型変換は必要最小限の型に変換されるってルールだったはずで、そのロジックに何か問題がある気がする 文字コード(-27811)はIntegerになるはずがLongLongに変換されてしまっていて、さらにHex関数がなぜかエラーを返さない
うーん、これはちょっと想定外の結果、かなあ 知らないでいるとハマりそうだわ Sub test2() s = "&H8" For i = 1 To 15 s = s & "0" Debug.Print Hex(s) Next End Sub
>>32 strは文字列型だからaの場合str = Asc("転")でやっていることは実質的にstr = cstr(Asc("転")). だからa,b,cはそれぞれ,hex(cstr(Asc("転"))),hex(Asc("転")),hex(Asc"転"))となりaだけ途中で数字ではなくて文字列にかわっているので 対応するhexの値が異なるのは当然. 型を意識しないで作るVBAerによくある勘違いというだけ
>>39-40 公式ドキュメントに8文字以下と書いてあるのに、たまに16文字返ってくるのは単なる勘違いで済む問題じゃないと思うぞ >>44 64bit 版のドキュメントが間に合ってないだけだろ >>44 実際の結果と説明が食い違ってたら説明の方が間違っている(修正が遅れている)だけだと思うが Officeが完全64bit対応になったのは2010から 12年遅れか……
>>46 まあ単なるバグの可能性は "0" ではないけど >>47 64bitが標準になったのは2019からだけど Sub test() Dim high As Long Dim str As String Dim num As Integer 'a str = "転" str = Asc(str) str = Hex(str) a = str 'a´ str = "転" str = Asc(str) str = Hex(CInt(str)) ad = str 'b str = "転" str = Hex(Asc(str)) str = str b = str 'c str = "転" num = Asc(str) str = Hex(num) c = str ありがとうございます。一旦は納得できました。
kou 'a str = "転" long_ = Asc(str)
>>37 >暗黙の型変換は必要最小限の型に変換されるってルール そんなルール聞いたことないが、どこ情報なんだ? コピー元のブックのシート上のチェックボックス(ON/OFF)を、 コピー先のブックのシート上のチェックボックス(すべてOFF)に 「チェックボックスのON/OFFの状態を」コピーしたいのですが そういう命令はありますでしょうか? [コピー元].Worksheets("シート名").Range("G3:AB5").Copy [コピー先].Worksheets("シート名").Range("G3:AB5").PasteSpecial xlPasteAll ではチェックボックスは空白のままなのですが、 「マウスでコピー元のG3:AB5を選ぶ→Ctrl+C→コピー先にCtrl+V」と手動で操作すると G3:AB5内のチェックボックスのON/OFFもコピーされるので なにか方法があるのではと思うのですが すべてをペースト(PasteSpecial xlPasteAll)ではダメなのでしょうか
ユーザーフォームのコントロールの位置調整について質問です。 テキストボックスA,B,Cが A B C と既に左右の間隔が均等に整列された状態になっており、 一番左にテキストボックスDを追加するとします。 D A B C この時、A-B間(B-C間も同じ) と D-A間の間隔を同じにしたい場合、 手動計算する(それぞれのLeftプロパティを参照して、差分を手入力する)のではなく、お手軽に設定できる操作はありますか? マウスのドラッグで D A B C を範囲選択して[書式]-[左右の間隔]-[間隔を均等にする]を選ぶと、 両端(DとC)の位置が固定された上で、その内側(D-A間、A-B間、B-C間)が均等になるだけで、 今回求めている結果にはなりませんでした。
D A B C を左右均等に並べたいんじゃ無いのか? D-A-B-C とか、スペースを-で表さないと、コッチからすれば説明文の上下は一緒に読めるんだが? D---A-B-C とかか?
>>59 スペースをハイフンで示します。 最初の状態 A----B----C Aの左側にDを追加するとします。 D-A----B----C マウスのドラッグで DABC を範囲選択して[書式]-[左右の間隔]-[間隔を均等にする]を選んだ場合は、 両端(DとC)の位置が固定された上で、その内側(D-A間、A-B間、B-C間)が均等になるだけ。 この場合は、最初の状態でのA-B間(B-C間)の間隔(スペース4個分)が保持されていません。 D---A---B---C 今回求めている結果 D----A----B----C >>56 どのチェックボックス?フォーム?activeX? >>57 Controls.Addでマクロにパーツを作らせて位置を指定するか自動計算させれば簡単 自分でイベント作る必要はあるかも >>63 ありがとうございます。調べてやってみます! >>62 「チェックボックス」だけの情報だと二つあるんですね すみません。 調べたところフォームのほうのチェックボックスでした。 'これ実行するとどうなりますか? 'Q1 「 3.2to4.1(14)ng:4>=4 」と ' 「 3.2to4.1(25)ng:4>=4 」になりますか? 'Q2 「 3.7to4(9)ng:4>=4.9 a:3.9 」と ' 「 3.8to4(9)ng:4>=5 a:4 」になりますか? Sub test() For i = 1 To 4 Step 1 Select Case i Case 1 a_from = 3.2: a_to = 4.1: a_max = 4# 'if[4 >= 4]でFalseになる Case 2 a_from = 4.2: a_to = 5.1: a_max = 5# 'if[5 >= 5]でFalseになるか確認用 Case 3 a_from = 3.7: a_to = 4#: a_max = 4# 'aが3.9までしかいかない Case 4 a_from = 3.8: a_to = 4#: a_max = 4# 'aが4までいく End Select c = 0 Debug.Print "***** from " & a_from & " to " & a_to & " max " & a_max, String(60, "*") For a = a_from To a_to Step 0.1 For b = 0# To 0.2 Step 0.1 c = c + 1 ab = a / (1 - b) okng = "ng" If a_max >= ab Then okng = "OK" Debug.Print a_from & "to" & a_to & "(" & c & ")" & okng & ":" & a_max & ">=" & Round(ab, 1) _ , "a:" & a, "b:" & b, "max:" & a_max, okng, "ab:" & ab ' Debug.Assert a_max >= a '[4 >= 4]でFalseになる Next Next Next End Sub
Dim a a = Range("A1:B2") これだけでaが2×2の配列になるとたった今知ったのですが このことを手放しに使って良いのでしょうか、それとも邪道だから Dim a(2, 2)なり要素数まで指定した方が良いのでしょうか。
>>69 問題ない VBA使えるやつならみんな知ってる それ便利だけど誤読しやすいので静的メソッドにしてる ArrayExt.FromRange(Me.Range("A1:B2")) みたいな
officescript調べてみたけど意外と分かりやすかった これならVBAがなくなっても大丈夫そう
>>69 型使わないとバリアント型だから二次元配列になるわけか ちなみに参考にしてる人はこう書いてた Dim a As Variant a = Range("A1:B2").Value
>>69 誰も書いていないので驚いたが、 その方法でもいい、のではなくて、 その方法しかない。 あとは Variant を明示するかしないかの違いだけ。 セルの値を取得して書き換えて…ってやるより二次元配列で処理する方が体感3倍くらい速いから、高速化したいなら配列使えばいいよね ただ他の人もわかるようにとかメンテナンス性考えると避けた方が無難だったり、ケースバイケース
他人の使い勝手なんか微塵も考えていないヤツが大半だろ現場じゃあ
Variantはポインタじゃなくて共用体 そもそもVariantオブジェクトはVBA固有の機能じゃなくてWindowsに組み込まれてて、別の言語からも自由に使える どういう場面で役に立つのかわからんけど
ポインタ的な使い方するならVariant型ではなくてObject型 Dim a As Object (総称オブジェクト型) Rangeオブジェクトに特定するなら Dim a As Range (固有オブジェクト型)
Variantってよく分からん型だよな Objectもそうでないものも仕舞えるし .Netで封印されたのも頷ける
>>78 配列の方が断然早いよね。 富○通がVBで作ったEXCEL名簿出力アプリが5時間以上かかってるのが、俺がEXCELVBAで組んだのは30分で終わる。 しかも富○通のはデータ1行ごとにコピペしてるので 動かしてる間コピーのバッファが奪われて他の作業が一切できない。 VBのコードみてVBAにする際に少し手直しした程度なんだと思うが どの程度のデータか不明だけど30分もかかるような処理も自分としてはNGだわ まあどっちも夜流して朝みればいいなら5時間でも一緒程度
何分とかかかる時点でRDBとか外出ししてやれないかとか考えちゃう Excelには荷が重いんじゃないかとね
どんだけ長い処理でも耐えられて2分までだわ 30分かかるとか論外
そんなに処理に時間がかかるってことは多分生データが数Gクラスだろうからaccessやexcelでは非効率だろう ここに>83の間抜けさがよく現れてる
そんな大規模なデータを扱ったことないからわからないけど 30分もかかったら途中で無限ループに入ってんだろなと思って止めてしまうわ
vbaを30分も動かすってどんな処理だよ あとあまり長い時間動かしっぱなしにすると大体フリーズしてるぞ
どんな処理でも構わないけどExcelのプロセスが起動してるときに新規のExcel起動>ファイルを開くで開けばいいけど 無意識のうちにダブルクリックなんかで開こうとしたらVBA実行中のプロセスで開かないとも限らないから 30分の拘束ってのは日中ならなし
そんなに速くしたら、フリーズしてないか監視する仕事の人がクビになっちゃうだろ ああいうのは、わざと1日かかるように作ってあるんだよ
なんでExcelエキスパート集団の富○通がそんなクソ遅いマクロ書くのか不思議だ。
富士通が直接作っているのでないだろうし、たった一つの例で全部がわかったつもりになる幼稚なアホ
あんまり処理に時間かかるようなやつならプログレスバーやらひとまず動いてることがわかるようなものを入れとくわ
1.xlsx、2.xlsx、3.xlsx、・・・、1000.xlsxという連番のブックがあって そのすべてにssssというシートがあって そのすべてのD2(R2C4)セルにデータがあるとして あるブックのA1~A1000に1~1000が入力してあって、 それぞれの隣(B1~B1000)に対応するブック(B500には500.xlsx)の シートssssのD2セルの中身を持ってくるのってどうすればいいですか? ExecuteExcel4Macroとか使ってそんなに難しくなくやれるかと思いきやまるでうまくいかない…
>>97 他に条件や例外がないなら自分で書いてる通り「そんなに難しくない」が、どこで詰まってるの? 内容あまり理解出来てないのかもしれないけど B500の行取得してワークブックオープンで引数ファイルパス500で開いてデータ抜きたいところ抜けば良いのではないでしょうか。 4使うあたり処理を重くしたくないのでワークブックを開きたくないようにも見えますが
こんな感じになる文字列を作ればいけないか?(フォルダ名とファイル名を変更していく) MsgBox ExecuteExcel4Macro("'フォルダ名\[1000.xlsx]ssss'!R2C4")
MSHTML.HTMLDocumentのbody.outerHtmlに何か代入しようとすると、 あるPCでは問題なく出来るのに、 別のPCではアプリケーション定義のエラーがでる 何故? ソースは同じなのに
>>68 即レスいただいてたのに遅くなりました。ありがとうございます。 常識なんですね。とてもためになりました。 少数が原因だろうと思いつつもローカルウィンドウの値は整数だし Fixしても発生するので困ってました。ありがとうございます。 >>104 してある してないと違うエラーメッセージだったような VBAで作ったブックを指定するにはどうやるのがいいんでしょうか VBAで複数ブックを作るとBook1、Book2、…となりますが、 どうやってそれぞれのブックを指定してやればいいのかが分かりません
ブックの作成の際にワークブック変数にセットする set=workbooks.add
変数に格納するってのは名前をつけてあげるみたいな意味合いがある気がする 変数作ってセットすれば呼び出しやすい
Set wb = ThisWorkbook Set ws = wb.Worksheets("sheet名") とやっといて、 カーソル移動したいだけなのに、 ws.Range("B3").Select とやったら、 「RangeクラスのSelectメソッドが失敗しました」 と出て動かなくなって・・・??? 原因はRange.Selectやる前に 当該sheetをActivateしていないことだと 今日、ようやく知ったアタシが通り過ぎますよ・・・
>>101 おっしゃる通りワークブックを開きたくなかったんです 諦めて>>100 さんの手法でいきました ありがとうございました。 >>112 VBAやっててSelect使うことなんてほぼ無いんだからその仕様を知らないことを気にしなくていい >>107 無いんだよね 代入が出来ないだけで表示は出来るんだけど、 ""の空文字すら入れられないのは何なのか… 型が一致しないエラーでもないし 仕方がないからDocument.writeで代用したけど >>114 気象庁の過去気象データ1時間値を DLしようとしたら、 1日ごとにURLが違うので、 1日分を読んではコピペさせてるんだけど・・・ 単体項目なら1年分一度に落とせるけど、 1観測地点の全項目は1日ごとの模様 >>118 データをコピペするだけならカーソル移動は必要ない それと、1日ずつDLだと365回になるけど、項目ごとなら15項目、15回のDLで済むからずっと早く終わると思うんだけど ワイなら大まかに 「データをURLでフェッチする」機能 「データをシートに表現する」機能 とかに分けてそれぞれの中でループする どんなデータ取るんかとか知らんけど 過去の気象データなら変化ないんやろから(少しずつしか追加されないし) あらかたDLしちゃって毎日追加する運用でよくね Accessで動くか知らんがワイなら楽だし(R)DBにして、 Excelは表現に特化させる まあDBとして考えるなら119の言うように特定のデータをカラムとして取り込むほうがいいけどね
>>119 >>118 > データをコピペするだけならカーソル移動は必要ない そうなんだ・・・ あたしゃ、 単ページのDLとその後の整形は PowerQuelyがやりやすかったので、 勢い、1日分ごと切って貼ってをVBAで・・・ って発想でやってた。 クエリー更新もVBAの中に入れて。 ネットの事例かき集めて 自己流で作ったのはこんな感じ。 ' DBテーブルの最終行の次行を計算 k = Range("R_Row_DB_Title").Value l = tbl3.ListRows.Count + k + 1 ' 単位読取りテーブルのデータ行をコピーして、 ' DBテーブル最終行の次行から貼り付ける Sheets("DL単位").Select ' この記述を入れないと次を認識しなかった tbl2.DataBodyRange.Select Selection.Copy Sheets("DB").Select Range("A" & l).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ActiveCell.SpecialCells(xlLastCell).Select 0 b 1 a 3 a 7 a 9 b 13 a 18 a 17 b aがbに入れ替わったら、上に隣接するa群の一番上(1 a)の数字を参照し、9-1=8を入力 bがaに入れ替わったら、上に隣接するb群の一番上(9 b)の数字を参照し、9-13=-4を入力 これを終わりまで自動入力したいのですが、どう書けばいいでしょうか。 いまいち説明がうまくできなくてすみません。
>>110 ありがとうございます まさかこんな単純な解決法だったなんて 勉強になりました >>123 >いまいち説明がうまくできなくてすみません。 問題を上手く説明できる事は、プログラミング能力の上達にとても大事な事。 >>125 ありがとうございます。 試してみてるのですが、画像G14が何をしてるか教えていただけないでしょうか・・ >>126 (・へ・) >>127 >上に隣接するa群の一番上(1 a)の数字を参照 この部分 E,F列は切り替わった部分を取得している。row()にすることで、切り替わった部分を取得できる maxで、切り替わった直近を取得 あとはindexmatchでA列を取得 質問です EXCELのアプリケーションを別途立ち上げて それをVBAを実行しているブック側から制御することは可能でしょうか? 可能だとすればどのようにすれば実現できますか?
VBAエキスパートの本見てみたけどこの範囲なら取得するのは楽勝だな
VBAの資格、人気度高いね。 ただ企業によっては何それ??的な見方されるのがちょっと。。
VBAでWinアプリ制御するマクロの動画作ったんだが誰も見てくれないや。 そういう需要てないのか?
>>134 API使ってバックグラウンドで制御してるなら見る RPA使わなくてもVBAでも結構出来るんだよね キーボード、マウス操作出来るしなんなら読み上げも出来るし アプリ立ち上げと組み合わせれば色々出来る
RPAは自動化そのものだから、 VBAでRPAを実現してるだけだぞ
>>136 動画名にExcelって必ず入れとかないと この手のネタを見たい人に検索で見つけてもらえない あと時々Excelで予定表の作り方とか番外編としてド素人受けするネタをエサとしてupするとか ゆっくりの顔はこれから無料で使用できなくなるんだよね?
>>141 トンクス。 オレのExcel2013だから今風のネタが作れないんだよね。 祝日込の予定表作ろうかと思ったら、自分のやつじゃpowerquery使えないことに気づいたわ。 だから誰もやってないネタとしてRPAもどきをやってみた。 2013でパワークエリ使っていた同僚いたけど、どうやったのだろ??
アドインを入れなきゃ使えんなんて知らんわ。 まあ、やってみるよ。
確かに。知っている人は少ないはず。2013にパワークエリアドイン。
>>149 使いたくて見つけられないのは馬鹿だと思うよ? ニッチな動画すぎるわ こういうのはたまに腕前を見せる程度でいいと思うぞ
エクセル動画って意外と伸びないんだよ 再生数あげてる動画も、数年かけてやっとこさ5桁とかそんなん
YouTubeでしょ? Excel動画の一部で100万回とか200万回再生動画あるけど、あれは例外かな? 配信者が人気度高いとか?
ぶっちゃけいちいち動画にするのやめてくれとしか思わんな テキストに書いてくれと
たいがいのことは検索すればブログと動画と両方出てくる 好きな方を見ろとしか
>>153 文字だとさ、その分の数行を細切れに書くやつがいてさ、 その分だけ見せられても困る事が多い。 解説書気取りなんだろうけど。 VBAならいいけど、pythonとかだと全体が見れないとな。 >>159 ドーガってソース全体見せながら饅頭が喋るの? 64bitだとdatepickerが使えないんだけど代替有りますか?
>>161 無いんだな、これが あと64bitじゃなくて2013か2016あたりから使えないはず クリップボードに あああ いいい 123 たたたた ららら 12ああ 000 1 かかか あかさ たなは 358 22558 のようにランダムな文字列や数字がはいっています。 空白や改行の数もランダムですがどちらも5個いないです。 あああ、や、いいい、の間は空白や改行のどちらかです。 文字列または数字を、空白か改行で区切って 横に10列ずつに並べたいです。 A1に「かかか」B1に「いいい」おなじように繰り返してJ1に「あかさ」、次はA2に「たなは」が入るようなイメージです。 うまく伝わっているかわかりませんが、どのようなコードを書いたらいいですか?
>>163 よくわからん部分もあるが クリップボードからテキストフォーマットのデータをstrに読み込んで改行ごとに分割(spritかね) 分割した文字列を更にスペースごとに分割して2次元配列にいれる あとはそれをセルに転写すればいいんじゃないの? 分けるのが改行と空白両方ならどっちかにリプレースしてからスプリット >>163 連続する改行と空白を消す。 for i = 1 to 5 a = Replace(a, vbCrLf & vbCrLf, "") a = Replace(a, " " & ” ” , "") next 改行を空白に置換する splitで分ける 配列をセルに入れる >>166 A1に「かかか」B1に「いいい」おなじように繰り返してJ1に「あかさ」、次はA2に「たなは」が入るようなイメージで どういう順番にしたらA1にかかかが来るのかがよく分からない
A1に「かかか」 ↓ A1に「あああ」 間違えてるだけだろ、それぐらい見抜こう
書かれてる仕様を思い込みで勝手に書き換えたらいかんでしょ 作り込む前に確認を取らなきゃダメだよ
>>168 Dim S As String With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .GetFromClipboard S = .GetText End With With CreateObject("VBScript.RegExp") .Pattern = "[ \n]+" .Global = True Dim R As Long R = 1 Dim C As Long C = 1 Dim T As Variant For Each T In Split(.Replace(S, " "), " ") Cells(R, C).Value = T C = C + 1 If 10 < C Then C = 1 R = R + 1 End If Next End With >>173 綺麗に見えるだろ? このコード、死んでるんだぜ…ヘヘッ >>163 VBAスレでいうのもアレだと思うけど 「改行、スペースで区切られたテキストデータを、10個ずつ(10列ずつ)で改行されるデータとして抽出したい」 って考えると正規表現可能なテキストエディタでやったほうが良いような気がする。 ( | |\r\n) を \t \t+ を \t ((.*?\t){2}) を $1\r\n にみたいな感じで >>163 同じくVBAスレでいうのもアレだし>>172 でよいと思うけど powershell -c "(gcb -raw) -replace '\s+', """"`t"""" -replace '((?:[^\t]+\t){9}[^\t]+)(?:\t|$)', """"`$1`r`n""""|scb" VBAから実行するなりバッチファイル(.bat)にして実行するなりすると 整形結果がクリップボードに入るのでA1を選択して貼り付け。 すでにExcel上にあるデータなら>>172 とかが有力だけど、 入力元がクリップボードならクリップボード格納前後(VBA前)で テキスト処理に向いた言語や手法(>>175 )で整形したらいいんじゃないの、と思う。 餅は餅屋、ってことで。 今回だとクリップボード操作と正規表現向き内容なのでPowerShellが向いてそう。 ・実行環境のOS(Windows 7で実行されうるか) ・文字列にダブルクォーテーションが含まれうるか ・「空白」の正確な定義(レアな空白を「空白」に含んでよいか) ・『A1に「かかか」』の謎 ・この整形処理前後の処理(処理全体、本当の処理目的) などにもよるけど。 常にそうだとは言わないけど、VBAでいろんなことしようとする人って 会社内でセキュリティに縛られてVBAしか使えないような環境でこっそりやってる場合が多いんじゃね うちなんてpowershellさえ使えない
>>177 VBAとVBScript/Jscriptはそれの定番だよ。 IEがなくなるとスクレイピングができなくなるよな。 そういう環境下だと、どうするんだろう。 163です。 レスくださった方ありがとうございました。 結論から言うと、>>172 を加工してなんとなくうまくできました。 A1セルは「あああ」が正しいです。すみません。 表示するのにラグを発生させたい場合sleepかウェイトを試して見たのですがソースの途中に入れても実行最初に止まって全部表示されてしまうのですがなにかいい方法はないのでしょうか
セルに挿入です for文を挟んでいるとどうもすべて止まって一括表示されてしまいます
excelのシートのA列に◎オプションボタンActiveXを付けた、B列には商品名(3000件くらいある)を入れた。 ◎ りんご ◎ みかん ◎ ぶどう ◎ ばなな ぶどうを選んだら、TRUEになった番号は「3番」って返ってきているのですが、3000件を設定するのが大変で一括で設定できる方法があれば何かヒントを教えてください。
>>181 なんのためのラグかを書けばもう少しマシなやり方を教えてくれるかも Sub foo() Range("a1:z100").Formula = "=rand()" End Sub こういうのを徐々に表示したいってなら、無理だ
Do Eventsってイマイチちゃんと意味を理解しない状態で使ってる気がする なんか図形でアニメみたいな動きさせるとか 入れると安定したり
>>189 WindowsというOSの(ほぼ)すべてがイベントで動いてる キー入力も画面表示もディスクアクセスも、何をするにもイベントが必ず使われる 普通に使ってるだけで、ユーザーの関知してないところで毎秒数十万回以上のイベントが発生してて、その一部は溜めたり無視することもできる そこで溜まったイベントをまとめて処理するのがDoEvents >>190 中途半端な知識の人の回答だな 所詮はExcel使いか ググって読んでもさっぱりわからんがプロシージャの共通化(´・ω・`)これかも。
>>190 ExcelのVBAがWindowsの全てのイベントを処理しているとでも思ってんの? いつの時代のWindowsだよ Loop中など他からの割り込みの余地入れる=DoEventsかと思ってました 厳密な意味は知らずに使ってました
昔はWindowsのイベントループそのものだったけど、今は>>199 くらいの認識の方が正しいよ 今のExcelは裏でスレッド使いまくってるから複雑 少しまだ難しいですが、とりあえずはwindowsの処理で無視していた分を一旦返してあげるみたいな処理なのだと認識しました。
昔はシングルコアで激重だったから適度に返さないとすぐに応答なしになった 今はマルチタスクで割と重い処理も平気
個人用マクロブックのプロシージャからシートに挿入されているマクロのボタンを押す方法を教えて下さい
privateを削除するんじゃなくて? 物理的にクリック?
物理的にではなくシート側のボタンのクリックイベントのプロシージャを個人用マクロブックのプロシージャから動かしたいです。
>>206 呼び出し先のブック名は入れてるのかもしれないけどモジュールが複数あってモジュール名は入れてない、とか? 説明が少なくて申し訳ありません。 マクロボタンのついた会社の帳票のマクロボタンを押して処理をした上に自分の個人用マクロブックの処理がしたいです。私は会社の帳票のマクロを変更する技術も権限もないのでこのような形を取っています
会社のマクロにパスワードが掛かってる、かつ起点となるマクロはその会社の方のマクロって事かな? 1. 会社のExcelと個人で用意したxlsm(個人用ブックである必要無し)を準備する 2. vbs やps1の外部ファイルから会社のVBA実行→個人で用意したxlsm内のVBA実行 これで行けるんでねえの?
そもそも権限のないものを突破しようってのは倫理的にどうなのって気がするが まずは上司なりなんなりに相談するところからじゃね
パスワードかかってるマクロなんて適当な野良アプリでわかるけどな
会社用のマクロ実行したあと、個人用マクロを実行するだけの作業なのに あくまでも自分の分からない領域まで手を入れたいってのは分からんな マクロ壊して分かりづらい変なトラブルになったら責任云々とかになりかねないかもしれんぞ 214のやり方がむりなら諦めるか上長に相談するべきやと思うで
>>219 100個ぐらいあるエクセルファイルを開いて、そのエクセルファイルのマクロボタンを押して一回目の処理をして次に個人用マクロブックに作った処理をしてエクセルファイルを上書き保存して閉じるを繰り返さなくてはいけないのでマクロ化したいのです。エクセルファイル側のプロシージャを個人用マクロブック側に持たせるのが一番簡単かなと その会社の帳票マクロとやらのファイルを開いてボタン押せるんならSendKeys使えば何とかなるんじゃねーの?(鼻ホジ)
>>220 工夫するのは上長に100個もある無駄なExcelファイルについて改善を提案すべきじゃね 下手なやつの自動化は害にしかならない それでだめなら自分の責任でこういうやり方していいかとか聞くとかそういう流れにはもうしたんやろ? 外部から呼ぶ214のやり方で無理なら諦めろ 改善して見込める君の給与メリットがそれほどの額じゃないんやろ これ公務員とかならマジで税金の無駄やなw 公務員なんて文系の仕事だから、効率のいいデータ整理やプログラミングができるやつなんてほぼいない しかし理系の人材に役所仕事させるのは税金の浪費以上にもったいない
>>206 wshでしょっちゅうやってるけど Set fso = Wscript.CreateObject("Scripting.FileSystemObject") CurrentDirectory = fso.getParentFolderName(WScript.ScriptFullName) Set ExApp = Wscript.CreateObject("Excel.Application") ExApp.Visible = True 'エクセル可視/不可視設定 ExApp.DisplayAlerts = False '警告メッセージをオフ Set Wb = ExApp.Workbooks.Open(fso.BuildPath(CurrentDirectory,"Book1.xlsm")) ExApp.Application.Run "Macro1" 上司に黙ってデータ改竄とかしたら 会社の資産を横領できちまうな
郵便局の場合、昭和のころから歴代の局長が引き継いでそう。 漁協の場合、いくつもの窃盗グループがありそう。 悪いこととは知らなかったって言いそう。
今日いちにち会社で配列に関する記事を読んでましたがここ10年くらいVBAに触れてなかったせいもあり よく理解できないためお力をお借りしたいです。 20万行くらいある空白の無いデータを処理したいのですが、私の書いたコードではどうしても速く処理できません。 F列が「Distribution (PCW; Sales value」とあったらその右のG列の数字を見に行き、3以下ならその行含め下に2行、合計3行削除したいです。 Sub TEST1() Application.ScreenUpdating = False Dim A 'セルの値を配列に格納 A = ActiveSheet.Range("A1").CurrentRegion '配列をループ For i = UBound(A, 1) To 2 Step -1 '「If」で検索 If A(i, 6) = "Distribution (PCW; Sales value)" Then If A(i, 7) <= 3 Then Cells(i, 1).Resize(3, 1).EntireRow.Delete Shift:=xlUp End If End If Next End Sub
一応こんな感じのデータです A列 B列 C列 D列 E列 F列 G列 CTM_ 12Area TM_2022 sku SKU Code Measure TOTAL 4.18- 4.25- 5.2- 5.9- 業態合算 Hokkaido その他 キヨウリツ ゼリ- 4901325124326 Distribution (PCW; Sales value) 8.64 7.03 6.63 9.19 11.70 業態合算 Hokkaido その他 キヨウリツ ゼリ- 4901325124326 Sales Store**** 2,386. 1,830 3,254. 2,244 2,460.5 業態合算 Hokkaido その他 キヨウリツ ゼリ- 4901325124326 Sales Store***** 666 7777 888 4444 7777
>>228 Excelの行を1行1行Deleteするのはどうやっても重くなるから出力用の配列を作るのがいいかな 配列を使ってんなら配列の中で削除処理しないとそりゃあ意味無いでしょ
>>231 >>232 ごもっとです、、(;^_^A 今日は疲れたので明日ちょっと調べて試行錯誤してみます。レスいただきありがとうございました。 いつもやる方法があるけどどのくらい早いのかはよくわからん
ユニークなキー列がもしあればディクショナリー使うのが速いよ まあ難しければ配列でも全然良いけど
>>234 少なくとも私のコードよりは速いんじゃないかな。。 15万行を10分以上かかってます(;^_^A >>235 ディクショナリーとは初めて聞きました。でもユニークなキーがありませんでした。。 SKU Codeという商品コードは基本ユニークなんですが3行ずつ同じ商品コードが並んでるんです。。(;^_^A >>236 じゃあこんな感じで作ったので10分以上がどのくらい早くなったか遅くなったか教えてください。 Sub TEST1() Application.ScreenUpdating = False Dim A 'セルの値を配列に格納 A = ActiveSheet.Range("A1").CurrentRegion '配列をループ For i = UBound(A, 1) To 2 Step -1 Debug.Print i '「If」で検索 If A(i, 6) = "Distribution (PCW; Sales value)" Then If A(i, 7) <= 3 Then Cells(i, 6).Resize(3, 1).Interior.Color = RGB(255, 0, 0) End If End If Next ' ActiveSheet.Range("A1").CurrentRegion.Select Selection.AutoFilter Field:=6, Criteria1:=RGB(255, 0, 0), Operator:=xlFilterCellColor Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select Selection.SpecialCells(xlCellTypeVisible).Select Application.ScreenUpdating = True Selection.Delete 'これはしないで目で確認して手動でDELETEしても良いかも End Sub >>228 ・最初にセルの内容をvariantの2次元配列に格納。 ・そのvariantを弄くり倒す。 ・ほしい結果になったvariantを最後に書き戻す。 セルはフォントだの背景色だの罫線だの表上のアドレスだのとにかくいろんな情報がてんこ盛りなので、valueみてりゃいい処理ならできるだけ書き換えない。 あと、蛇足なんだけどソースでやってることそのものをコメントで書いてもあまり意味が…。 '配列をループ For i = UBound(A, 1) To 2 Step -1 とか '「If」で検索 If A(i, 6) = "Distribution (PCW; Sales value)" Then は、いらないのではと。 もひとつ、削除系処理は下からループさせたほうが無難な気がしないでもない。
>>235 Dictionary使うならユニークなキーがなくても行番号をキーに突っ込めば大体応用効くよね アイテムはArrayで格納すればいいし ちなみに行削除は、DeleteTargetRowみたいなRange型の変数を使って、削除対象の行が出たらその変数にUnionしていってまとめて削除、がまだ速いかな
>>237 自分で15万行のデータで試したらDebug.Print i を外しても遅すぎたので作り直し うちでは5秒でした (Core2Duo E7500 RAM8G win10 Excel2010) 元データのF列に色がないことが条件ですけどね Sub TEST1() Dim startTime As Double: startTime = Timer Application.ScreenUpdating = False Dim A A = ActiveSheet.Range("A1").CurrentRegion For i = UBound(A, 1) To 2 Step -1 If A(i, 6) = "Distribution (PCW; Sales value)" Then If A(i, 7) <= 3 Then Cells(i, 6).Resize(3, 1).Interior.Color = RGB(255, 0, 0) End If End If Next ' Application.ScreenUpdating = True Dim mySheet As Worksheet: Set mySheet = ActiveSheet Dim tempSheet As Worksheet: Set tempSheet = Worksheets.Add Dim myRange As Range: Set myRange = mySheet.Range("A1").CurrentRegion myRange.AutoFilter Field:=6, Operator:=xlFilterNoFill myRange.Offset(1, 0).Resize(myRange.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy tempSheet.Range("A1") mySheet.ShowAllData myRange.Clear tempSheet.Range("A1").CurrentRegion.Copy mySheet.Range("A1") Application.DisplayAlerts = False tempSheet.Delete Application.DisplayAlerts = True MsgBox (Timer - startTime & "秒でした") End Sub myRange.Offset(1, 0).Resize(myRange.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy tempSheet.Range("A1") を下に修正 myRange.SpecialCells(xlCellTypeVisible).Copy tempSheet.Range("A1")
>>241 お何か良いアイデアかも 横からだけど使わせて貰おう >>237 おそら>>243 さんもそうかな? あの後寝てしまい申し訳ありません。 8時くらいになるかと思いますが動かしてみますのでお待ちくださいm(__)m 夜遅くまでどうもありがとうございます!(´;ω;`) >>238 スミマセン、・そのvariantを弄くり倒す。 からもうよくわからないレベルです。。でもありがとうございます。 >>239 基本はネットで拾ったコードを貼っているので、、 でも自分の参考にはなってます笑。 ありがとうございます。 >>241-242 ちょっと時間あるときに勉強してみますね(;^_^A >>243 えっ!!何が起こったの? こっちも5秒で終わりましたっっ!!!えええぇ信じられないスゴイスゴイ!!!(笑) ちょっと後でゆっくりF8で動かしてみようと思います!!! 本当に助かりました!ありがとうございました!!! (´;ω;`) >>244 見落としてましたスミマセン。修正してなくてもめちゃくちゃ速く動きましたが こちらも動かしてみますね。ありがとうございました!m(__)m >>244 のは見出しが消えるのを修正したコードでしたね(;^_^A あと、会社のPCで動かしてみたら2秒もかかりませんでした。 素晴らしいコード、本当にありがとうございましたm(__)m 配列の勉強したいと思います。 質問者の要望事項がクリアだったしサンプルコードや表のイメージを出してくれたから回答がしやすかったと思います 殆どの質問者はそんな事までしないクレクレちゃんだから
>>250 昔のテンプレに沿った質問の仕方してなかったのでダメ元でしたが 最低限やるべきことはクリアしてたみたいで良かったです。 (*^-^*) >>250 これはほんとにそう ふわっと伝えるだけできちんと勝手に書いてくれると思ってるやつの多いこと 定常業務としてはExcelではやらなくなるにしても、 10万行相手に、最初の試行錯誤をExcelでやってみる というのはよくある話かと。 設計云々はそれが分かってから。
ワイの感覚では数百行とかでもExcel脱却したいし、 こんなんSQLと適当なスクリプトですぐ済むやろ Excelになってるから重くなったりしちゃうだけで Accessはしらん みんなExcel万能思想すぎるんだよなあ
職場で与えられた環境でどうにかしようとすると、 結果的にVBAやバッチファイル、PSスクリプトになる気がする
SQL書けるんだったら そもそも質問主はこのスレに来とらんことに気付かない、 ただのマウンテンゴリラはウセヤガレ
VBAもできないからこのスレにいるわけで、間違った道に進む前に正してあげるのは良い
個人用マクロブックからエクセルのシートのマクロを動かす方法がわかりました。ファィル名をtest.xlsm、シートのボタンに登録してあるマクロをsub test()~end subとして Application.Run"'test.xlsm'!Sheet1.test" これで動きました。Run以下をダブルクォーテーション、ファイル名をシングルクォーテーションで囲むのがポイントです。
権限のない新入社員が勝手にマクロ作って社内のデータ壊したらどうなるかわかっているのかな? そのデータほんとに削除していいのですか? 条件ミスって消してはいけないデータ削除してしまったら・・・ やろうと思えばできるけど俺は怖くて自前のマクロなんか動かしたいとは思わんのだがな
>>261 データいじる前にバックアップしないのか? >>261 間違えてデータを削除するプログラムを書いてしまうなんて普通ありえるのだろうか?AIが暴走するといかんからパソコンやスマホを使うのもやめたほうがいいレベルの発言だな これをループで100個くらいのブックに処理するらしいから漏れのほうが怖いね、ワイ的には 「自動化したから漏れたんだ」とか言われたら今後やりづらくなる
他の.xlsxのファイルの中身を、新たにExcelの画面を開かずに、 配列などに読み込む方法はありますか? 読み込みたいファイルのレコード数は毎回違うのですが、 可能なのでしょうか
マクロ4.0 もしくはアドレス直指定 visible=False だと実際は開いてても見えないように出来たんだっけか?
aに16進数のABを代入するときは a=&HAB だけど、 aに2進数の100を代入するときはどう書く? a=&B100 だとエラーになるんだが・・・・
2進数を表すリテラルはないので、16進数や8進数で代用。 変換できればいいのならワークシート関数にある。
>>268 専用の命令はないことも関数のサンプルもググったらすぐ見つかったが他人を辞書代わりにするつもりとかか? 旧BASICやアセンブラ扱ってた奴なら 少なくとも1バイト、多ければ2バイトまで表現出来る 2の倍数を覚えてるから無問題
>>274 お前がその新入社員とやらに苦しめられた経験があるのは分かったから、このスレから消えろ。 >>274 初心者が作ったマクロで危険度が高いやつの具体例をあげてみて。今日中に書き込みがなければ、その程度とみなすから タコペッティのユーチューブチャンネルより ・週2日出社、週2日在宅の週4日勤務が最高の働き方だと提唱したい ・週休3日制になったら給料を減らされる??そんな考えだからいつまで経っても貧乏なんだよ... ・【朗報】「在宅勤務OK」の求人、コロナ前と比べて7 7倍に上昇! ・【驚愕】リモートワーク求人が13倍に増加w リモートワークができる人とできない人とでますます格差は広がる... ・【悲報】「会社員に戻りたい!」というフリーランス、全体の3%しかいないw ・【悲報】副業が解禁されても、副業を見つけられずに困窮する会社員が続出... 日頃から副業をやっておくことの重要性を再認識しよう ・【驚愕】5人に1人は本業よりも副業収入の方が多いことが判明w 本業よりも稼げる副業とはなんなのか??
>>277 幼稚な馬鹿がよく使うマウント取ったと自分で思い込むために使う言葉 何時何分何秒? 今日中に >>277 あるとしたらもともと設定してある参照先やリンクや関数とかを知らずに上書きしたうえで保存するとかかね このセルはいじらないでくださいって手作り感のあるコメントとか見たことない? 初心者の作ったマクロに悩まされたエピソードがいくらでも出てくるかと思いきや単なる作り話かい?なめてたのはお前の方だったな
操作を間違うと処理が狂ってUsersの中身を全て消そうとしてくるマクロになら遭遇したことある あとはシンプルにブックやシートの指定をちゃんとしてなくて別に開いてたファイルをメチャクチャにしちゃうとかがまぁよくある可愛い話 あとは別に危険ではないけど新規ブックを作成してそこにマクロを乗せてローカルで実行させるってマクロが 書き込んでくるコードにOption Exlicitが含まれてるせいで変数の宣言を強制するにチェックを入れてるとエラー停止するマクロに遭遇した時はおったまげたな
初心者でよくあるのは 「すみまdーん、先輩、SQLのDELETE文の発行部分でWHERE区付け忘れてデータ全部消しちゃいましたー」って奴かな もちろんUPDATE区の場合もある。 当然、UT環境でテストする前だからそうそう致命的になることはないけど その環境で同時期にテストしてた人達には平謝り、最低1日分のテストデータ作り直しになったりして白い目で見られるようになったりはするな。
>>263 本気でsuしたあとに cd / rm -fr \* の現場なら見た。悲惨だった。ずいぶん昔だけど、Unixの世界は無情だったな. xxx ってユーティリティー供給した人がシェルスクリプト間違えて rm -fr /usr/xxx/* ってやるところに空白入れて rm -fr /usr /xxx/* ってやって/usr/以下全滅ってのもあったな それでも、「なんかあったら責任取れるのか??。却下却下!!!」的な阿呆にはなりたくないよな。 その方針だと石器時代にすら進めんわ。 マクロのブック自体を保存する処理なんか入れてて、しょうもない状態で保存しちゃってたのは見たな 結局以前のバージョンから戻してたけど
ここにいる的確な回答する人って絶対他の言語やってるよなって思う
いや、単にExcel歴30年以上とかのベテランでょ
Excel歴10年以上あると、「あ。これExcel単体じゃ無理だけど、Excelを呼ぶシェルから呼べば秒」って場面ないかな?
>>286 テストのつもりが間違って本番環境に接続しててぶっ壊す例なんていくらでもあるだろw >>293 だから具体的な例をあげてみてよ。 想像でものを語るな 相当具体的だと思うが? 接続文字列の内容を知りたいとかか?w
あーコピペしてそれをループすればいいと思ったのか N+1みたいなの書いてmax connectionsかなんかでDBに接続できなくしたのもいたなあ
>>293 確かにあるあるだけど 初心者に本番環境弄らせることはまずない そんなこさせる会社や現場は既に破綻している 初心者はVBAどころか関数使うのも生意気とされる職場もあるからな。電卓で計算して結果を表に手入力してるようなとこだと
>>297 > 初心者に本番環境弄らせることはまずない お前さんの経験値が低いだけかと > そんなこさせる会社や現場は既に破綻している そうだね、でもあるという事実は変わらんけどね そこマウント取ってどうするの?って話題で盛り上がるよねこのスレ
質問スレなんて基本的に初心者の来る場所なのに、そこで初心者はマクロ使うなと言われてもね
VBAがExcel内の機能しか扱えないよう制限された設計になってるのならわかるが 実際にはファイルやデータベース操作、 やろうと思えばHTTP通信やUI Automationだって「できてしまう」以上、 危険な挙動は常に発生しうるでしょ
表の左にラジオボタンを配置、表をリボンのフィルタ機能で絞り混むと、ラジオボタンが大集合してしまう。 これを何とかしようとセル移動しても一緒に移動しない設定にしたら今度は絞るとラジオボタンが残ったままになる。 フィルタで絞ったところの左のボタンだけ表示させる方法教えてください。
しうるから使うなではなく、 使うなら気を付けろでいい話でしょ 本人のやらかしの責任を負うわけではないんだしさ なんならVBAもしくはム全般でのやらかしスレでも作ってそこでやる?
>>305 ここで聞くとスレタイにちなんだ回答になるけど良い? てか、初心者云々は別にしてマクロ書かない人が来るスレじゃないでしょ
むしろ剛毛で困ってるstep 3でdeleteしたいわ
>>301 そうか 破綻したブラック企業に勤めているのか 大変だな >>315 もう定年退職したけどうちの会社は普通に存続してるけど? いろいろな部署があることも知らないとか零細にお勤めなのかな?w エージェント47の見た目が悪いようには見えないからハゲはセーフです
それはいつもの「ただしイケメンは除く」って奴だからお前らはアウトだよ
ユーザーフォーム上のボタンをクリックすると、 Private Sub CommandButton1_Click() End Sub のように挿入されますが、この挿入位置には法則性はありますか?
じゃあ今度からこのスレのみんなの事を禿って呼んでええか?
何か変な奴が増えたな。 前はまともな回答が得られたんだけど。 無職か
サマータイムめんどくせぇな… 今サマータイムかどうか表示したいんだけど誰か式作って笑 VBAでも数式でもどっちでもOK
サマータイムは国によって違うし年によっても違う あと自分で作らなくてもあるからぐぐれ
2022年のサマータイムはいつから? 【開始】2022年3月27日(日)午前1時 → 午前2時へ1時間進める【終了】2022年10月30日(日)午前2時 → 午後1時へ1時間戻す(遅らせる)※スイスはUT1の国なので、上記時間にプラス1時間足した時間を基準とする。 ぐぐったらこれがでてきたからこれで計算すればいいのでは
>>342 +1 いろんなものにぶつけやすいよなωωωωωωωωω 会社ではVBAしか使わしてくれんのじゃ。 アルツハイマーでもこれくらい分かる。
>>350 その程度の発想しか出来ない人は書き込みしなければいいのに >>351 自力でサマータイム求められない奴に言えよ >>352 このスレの多くの人が当てはまってしまう 海外ネトゲでサマータイムに苦しめられてるから VBAじゃないけどC#でちっこいの作ったわ
Application.OnTime 使えば、一分ごとに表示変えるとかできるね あとは面倒だけどサマータイムに入る日時と出る日時計算する関数作って・・と
サマータイムこれから実装なんて何回車輪の再発明するつもりだろう
VBAで自分自身のファイル名を持ってくる場合て、 エクセルVBAなら Debug.Print ThisWorkbook.Name パワポVBAなら Debug.Print ActivePresentation.Name だけど、 そもそも自分がエクセルなのかパワポなのかを判断することてできる。ActiveDocument
Excelとワードで同じVBAを流してみたんですが、挙動が異なる。 これってバグ? office2013です。 Set myDocument = ActiveDocument 'Set myDocument = ActiveSheet x = 110: y = 10: r = 100: h = 100 a = 0.3 Set shp = myDocument.Shapes.AddShape(msoShapeArc, x, y + r * (1 - a), r, r * a) With shp .Adjustments.Item(1) = -180 .Adjustments.Item(2) = 180 .Line.DashStyle = msoLineDash .Line.Weight = 2 End With Set shp = myDocument.Shapes.AddShape(msoShapeArc, x, y, r, r) With shp .Adjustments.Item(1) = -180 .Adjustments.Item(2) = 180 .Line.DashStyle = msoLineSolid .Line.Weight = 2 End With >>361 単に円の中心をどこにおいて描画するかって違いでしょ 仕様としか >>362 確かに違う。 でも、なぜWordとExcelで仕様を変える必要がある? どっかに明記してあったけ? >>363 考え方が逆 エクセルとワードのオブジェクトが全然別物なのに、vbaのコードが似てる事が奇跡なんだよ 俺からすれば、よくぞ無修正で動いてるなってのが素直な感想。結果が同じなんて微塵も期待しない エクセルvbaをワードvbaに移植しようなんてそもそも思わない >>360 自己解決した。 Application.Caption でなんとなくわかる >>365 馬鹿は日記を書くな Application.Versionだろうが どっちも極端 Objectが別物だって理解していれば 使い回しが効く部分は使いまわせる EXCEL VBAの使える部分をACCESSで使ったり VBSの挙動確認のためにEXCELのVBAに 落とし込むなんてザラにあること。
>>366 バカはお前だろ。 Application.Versionで何が区別がつく。 全部同じ値だ。 セルの書式を配列に保存しておきたい場合、 Rangeオブジェクトの配列を使わなきゃダメですか
設定の情報を文字列化すればstring型でもいけるんじゃないかな? 保存したい情報が複数あるならカンマで結合してsplitで取り出せば良いだけだし
表示形式と背景色なら文字列にできるけど、書式って文字列に変換可能か? 罫線って文字列で取れたっけ
罫線の有無をTrue/Falseで判定すればいけない?
>>375 > 罫線って文字列で取れたっけ 数値(列挙値)で取れるんだからテキトーに文字列化すればいいやん >>376 太さ、線種(鎖線とか)や色もあるから 罫線はRangeオブジェクト(のプロパティ)ではなくてBorderオブジェクト
// n = 1, 2, 3 or 4 b = sheet.Cells(r, c).Borders(n) b.Weight 代入&参照 b.LineStyle 代入&参照
結局Rangeで格納した方が早いわな 配列が嫌ならコレクションとかでも行けるけど
書式を保存するシートを別に作っておいたほうが楽じゃない?
禿達ってなんですぐ喧嘩になるの? お互い譲り合えば良いじゃん。
そこをなんとか、Excelでwebview2を使うことは出来ませんか?
>>386 馬鹿にするな!うっすらとまだ残っているわ! >>383 > お互い譲り合えば良いじゃん。 「ネコと和解せよ」 VIDEO (逆再生という指摘もあるが・・・) 'Word,Excel,Powerpointどれでも動くようにする Select Case True Case Application.Caption = "Word" Set myDocument = ActiveDocument Case InStr(Application.Caption, "Excel") > 0 Set myDocument = ActiveSheet Case Else Set myDocument = ActivePresentation.Slides(1) End Select 'あとはmyDocument.なんとかで操作すればどれでも動く。
唐突ですが、30歳を過ぎて頭皮を去っていく髪の毛が増えてきました。 今までは粘着力の強いコロコロで定期的に取っていましたが、これが厄介で、頭からからは簡単に抜けるくせにカーペットからはなかなか離れようとしません。 また、いくら自分の髪とはいえ、毛の大群がまとわりついたコロコロを剥がすあの瞬間が最高に嫌いでした。 勿体無いかな…でも欲しいな…など思いつつダ〇ソンのハンディタイプを買おうと迷った事もありましたが、1/5のお値段で高評価のこちらの商品でとりあえず様子見することに。外箱が思っていたよりもかなり小さく、最初は失敗したかと思いましたが、開けてみると質感も良く、これなら部屋のどこに置いても邪魔にならなそうです。 そして肝心の吸引力ですが、あんなにコロコロで取れなかった脱走兵どもが綺麗に吸い込まれていくではありませんか! ついでにいつぞやの晩酌の際に食べこぼしたクルミの欠片など、多少大きさのある物でも綺麗に吸い込んでくれます。もしかしたらダ〇ソンはもっと強力に吸ってくれるのかもしれませんが、私と同じような悩みをお持ちの方でしたら、これで十分でしょう。アタッチメントも布団用や狭いところ用のものもついていますので便利です。 もういっそ、頭に直接この掃除機をかけた方が早いんじゃないかと思ってしまう程です。
以前こちらでお世話になったものですが、うまくファイルに転記できないためまたお力をお借りしにきました。。 2つのブックがあって、別のブックにエリアごと(B列で判定)のデータをぺたぺた貼って保存すればOKなんですが 元データが10万行くらいあって、なぜかブックはエリアごとに保存は出来るのですが、あるはずの半分くらいのデータしかコピペできてないのです。 コピペで切り貼りしたコードで見づらいくて申し訳ありませんが、おかしいところがあれば教えていただけないでしょうか??(H列が最右の列でTOTALにあたります) ■データのイメージ 延々と下に10万行くらいあります。 A列 B列 C列 D列 TOTAL 業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P473ML 4960405664923 Distribution (PCW; Sales value) 0.01 業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P473ML 4960405664923 Market size (Value) 339,651.60 業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P473ML 4960405664923 Sales per store selling item (Unit) x1,000 5,744.20 業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P473ML 4960405664923 Sales per store selling item (Value) x1,000 573,148.54 業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P946ML 4960405664947 Distribution (PCW; Sales value) 0.05 業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P946ML 4960405664947 Market size (Value) 697,424.54 業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P946ML 4960405664947 Sales per store selling item (Unit) x1,000 6,850.74 業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P946ML 4960405664947 Sales per store selling item (Value) x1,000 871,208.64 業態合算 東海 大容量 PKS SOYBIO ソイビオトウニユウY プレ-ンムトウKP400 4589850822179 Distribution (PCW; Sales value) 41.70 業態合算 関東 大容量 PKS SOYBIO ソイビオトウニユウY プレ-ンムトウKP400 4589850822179 Market size (Value) 197,839,014.22
コードです 長いので分けます Sub Export_ExcelFile() '変数の定義 Dim Wb1 As Worksheet, Wb2 As Workbook, FileNam As String Dim xPath As String Dim key As String Dim i As Integer Dim Sh1 As Worksheet Dim Sh2 As Worksheet Application.ScreenUpdating = False 'ワークシートを指定する Set Sh1 = ThisWorkbook.Worksheets("Sheet1") 'データの始まり2行目を指定 Dim start As Long start = 2 Set Wb1 = ActiveSheet '元シートをActiveSheetにセットする '出力先のパスを指定 With ActiveWorkbook xPath = .Path & "\" 'ファイルが置いてあるフォルダからのパスを指定 End With
'エリアが空欄の位置までループ Do While Sh1.Cells(start, 2) <> "" Set Wb2 = Workbooks.Add ' 新規ブック作成 Set Sh2 = Wb2.Worksheets("Sheet1") '新規ブックのシートを指定 'ファイル名に付ける日付を取得 Dim strDate As String strDate = DateSerial(Year(Now), Month(Now), Day(Now)) strDate = Format(strDate, "yyyymmdd") 'Excelファイル出力 FileNam = xPath & Sh1.Cells(start, 2).Value & "" & strDate & ".xlsx" 'コピー元の最初のエリア名を取得 key = Sh1.Cells(start, 2).Value '同じエリア名が続く間はループ Sh1.Activate Do While Sh1.Cells(start, 2).Value = key 'データ行に色をつける Cells(start, 7).Resize(1, 1).Interior.Color = RGB(255, 0, 0) 'Cells(i, 7).Resize(1, 1).Interior.Color = RGB(255, 0, 0) i = i + 1 'コピー先の行を一つ下にずらす。 start = start + 1 'コピー元のエリア名行を一つ下にずらす。 Loop
Dim mySheet As Worksheet: Set mySheet = ActiveSheet '赤く塗られた行をソートしてコピペする Dim myRange As Range: Set myRange = mySheet.Range("A1").CurrentRegion myRange.AutoFilter Field:=7, Criteria1:=RGB(255, 0 _ , 0), Operator:=xlFilterCellColor myRange.SpecialCells(xlCellTypeVisible).Copy Sh2.Activate Range("A1").Select ActiveSheet.Paste Sh2.Range("G:G").Interior.Pattern = xlNone mySheet.ShowAllData Sh1.Range("G:G").Interior.Pattern = xlNone '分割したファイルを保存して閉じる Wb2.SaveAs Filename:=FileNam ' 同一フォルダに保存して閉じる Wb2.Close '分割ファイルのブックを解放 Set Wb2 = Nothing Loop Application.ScreenUpdating = True MsgBox "終わったよ" End Sub
元データを少なくして全部で50行くらいにしたら上手くファイルを分けて保存出来てたんですが、、、 もし問題点がお分かりになる方いらっしゃったらよろしくお願いしたいです(>_<)
32bitのexcelと64bitのexcelでintの範囲違うんだろうか (もちろんOSの話ではない)
>i = i + 1 'コピー先の行を一つ下にずらす。 ってあるから貼り付け先が integer 超えたらだめじゃねって思った
Dim 残りの髪の毛 As byte Dim 抜け毛 As LongLong あとよろしく ↓
>>411 なるほど!どうりで最後まで貼られてなかったんだ(´;ω;`)早速ありがとうございます。 ちょっと自分でやり直してみます!!m(__)m >>412 流れぶった切ってゴメンなさい でも考えすぎてハゲそうな勢いでした。。頭悪くてイヤになります。。 ダメだ、integerをlongに替えてやってみたけど やはり半分以下しか貼られませんでした。 もう少し頑張ってみます
自己解決しました。1つのエリアの塊が飛び飛びになってたので 同じエリアのブック内で上書きされてたみたいです。 でも皆さんのおかげで解決出来ました。ありがとうございました! またハゲそうになったらこちらに伺いたいです。。懲りずによろしくお願いいたしますm(__)m
※よろず~ニュース 波平さん銅像に髪の毛戻る 引き抜かれてから5日の〝スピード植毛〟 https://yorozoonews.jp/article/14640597 杉田 康人 東京都世田谷区の桜新町商店街にある人気アニメ「サザエさん」一家の銅像から引き抜かれていた髪の毛が8日、復活した。同商店街によると3日朝、波平さんのトレードマークとなっている貴重な1本毛が抜かれているのが見つかった。ワカメちゃんの頭頂部から跳ね出した〝アホ毛〟3本もなくなっていたが、商店街の依頼を受けた業者が8日午後までに修復した。 サザエさん一家は、桜新町に住んでいる設定。作者の長谷川町子氏の美術館・記念館おひざ元の桜新町商店街は、作品ゆかりのストリートとして知られる。銅像は2012年(平成24)に建立したが、商店街の担当者によると波平さんはこれまでに6度、毛を引き抜かれる憂き目に遭っている。ワカメちゃんの髪が抜かれるのは初だという。 銅像の髪の毛は、針金にビニールをコーティングしたもの。(略) ※省略していますので全文はソース元を参照して下さい。 このハゲ / ̄ ̄ ̄ ̄ ̄ ̄\ / \ / ヽ l:::::::::. | |:::::::::: (●) (●) | |::::::::::::::::: \___/ | ヽ:::::::::::::::::::. \/ ノ
パソコンばっかやっているから禿るんだわ いい加減気がつけよ
禿げてる奴がパソコンばっかやるようになるんだわ 人生って残酷だよな
真面目に話すと、パソコン作業は頭使うしストレスの負荷が高いから禿やすいとは聞いた。
人間関係の煩わしさでストレスの負荷が多い場合が多いから、パソコン作業はハゲにくいらしいよ
パソコンからは強い電磁波が出てるから、パソコン作業は禿げやすいとは聞いた。
このスレで質問するレベルの馬鹿が作ったExcel表のせいで葛飾区の保育所は大騒ぎ
エクセル2016で複数のbook開いてると単体で開いてるときよりもずっとVBAの動作が遅くなるんだけど 解決策知ってる人いる?
>>432 え?詳しく ググっても詳細出てこない。 禿そうだわ あ、葛飾区のニュース出て来た 表計算ソフト式に誤りとか最低だろう。 テストしなかったのかな?
どーせsubtotalじゃなくsumで小計出してたせいで合計が2重計上されたとかじゃねーの
Dick A as strong Dick B as strong If A > B then A = Tachi B = Uke End if A => B
どこにも竿の大きさなんて書いてない クラス定義まで見ない限り、何を比較してるのか、このコードだけではわからない さては思い込みでコードを書いてバグを発生させちゃうタイプだな?
If Dick(竿)A>DickB Then A=タチって書いてあんじゃんか
Strongは精力じゃね? 大きさならSizeとかLengthとか
DickクラスのSizeプロパティは読み取り専用 Electプロパティは代入可能 Cumメソッドは1日5回以上使うと例外発生
ShapeとTextBoxをマクロで作ったのを 別のBookのSheetにコピペした時のフォントは マクロ側とコピペ側だとどちらに依存しますか?
質問失礼いたします。 ユーザー定義型に以下のようなツリー型になる感じの物をPublicで宣言してて クラスモジュールにユーザー定義型の変数を作っているのですが、 プロパティの作り方で悩んでいます。 以下標準モジュール内 Public Type MinorItemType ' 小項目 minorItemName as String ' 小項目名 minorItemID as Long End Type Public Type MajorItemType ' 大項目 majorItemName as String ' 大項目名 majorItemID as Long minorItem() as MinorItemType End Type 以下クラスモジュール内 Dim majorItem_() as MajorItemType この場合、以下のようにMajorItemType型のプロパティを作成して丸ごと渡すのか、 Public Property Get majorItem(ByVal num as Long) as MajorItemType majorItem = majorItem_(num) End Property それともユーザー定義型の中の変数へのプロパティを1つずつ作成するのか、 どちらが正しいのでしょうか? ちなみに作成するプロパティは原則Getのみで、 変数に値を取得するのは、クラス内に作成したSubプロシージャで シートへ値を取りに行かせる具合です。
>>456 ありがとうございます。前者の方法で行ってみます。 戦車の砲塔で行ってみてやりにくかったら変えればいいんじゃね
文字列の一部分に0付き右詰めの数字を入れたいのだが・・・・ a = "000000000" b = a Mid(a, 2, 5) = 123 Debug.Print "変更前" & b Debug.Print "変更後" & a 結果 変更前000000000 変更後012300000 これだと左詰めなんだが、こうなるべきじゃないの? 変更後0123 000 midにRightをかぶせてみたんだが、 Right(Mid(a, 2, 5), 3) = 123 オブジェクトが必要て言われる。 どうすればいいの?
format(123, "000000000")じゃ駄目なの?
Mid(a, 2, 5) = 123 の右辺を数字のままにしてるからおかしくなると思うので CStr(123)みたいに文字列にしてからセットすればいいんじゃ
むしろ Mid(a, 2, 5) = 123 これでなんでaが012300000になるの?どう評価されてるの?
??? Sub foo() a = 0 Mid(a, 1) = "aaa" '通る Right(0, 2) = "bbb" 'エラー Debug.Print a End Sub
自分ならright("000000000" & "123"の右側を取る
ああ右詰で数字をいれたいのか 自分のレスは無視して そもそも桁数も統一してないからそこから見直せ
Sub sample() '01 PIC X(1) '01 PIC 9(5) '01 PIC X(3) a = "A00000ABC": Debug.Print "元データ :" & a Mid(a, 2, 5) = Format(123, "00000"): Debug.Print "パターン1:" & a a = "A00000ABC" Mid(a, 2, 4) = Format(123, "0000"): Debug.Print "パターン2:" & a a = "A00000ABC" Mid(a, 2, 5) = Format(123, "000"): Debug.Print "パターン3:" & a a = "A00000ABC" Mid(a, 2, 5) = 123: Debug.Print "パターン4:" & a a = "A00000ABC" c = "00000" RSet c = 123 Mid(a, 2, 5) = c: Debug.Print "パターン5:" & a End Sub 元データ :A00000ABC パターン1:A00123ABC パターン2:A01230ABC パターン3:A12300ABC パターン4:A12300ABC パターン5:A 123ABC パターン1が正解なんだけど、なぜパターン4は3文字分だけ書き換えるんだろう? パターン4がOKならパターン5でもいけるような気がするが、パターン5は空白を埋める。 RSet Mid(a, 2, 5) = 123 はエラーになる
それ以前に Mid(a, 2, 5) = Format(123, "00000") でエラーが出ないのがおかしいだるお
ID:ImMFuzyy0 馬鹿は黙っていればいいのに そうやって馬鹿を曝け出していると頭の皮膚も曝け出されるぞ
midステートメントは今ある文字列に対して別の文字列を被せるだけの動作だよ
引数以外の手段で関数に値を代入(?)するという前代未聞の珍動作 何が起きるか分かったもんじゃない
つまり Mid(a, 2, 5) = 123 は aの2文字目から5文字分ところに、"123"を書き込むんだけど、 3文字しかないから、4-5文字目は何もしないてことだよね。 でも代入の原則論から言えば、足りない部分はスペースで埋めるんじゃないのか? RSetは足りない部分はスペースで埋めてる。 まあ、それが仕様だて言えばそうだけど、 深く考えて作られてないのかな。 もし、RSetも3文字しか代入しないのなら、RIGHTやFORMATを使わなくても0埋めができるし、 単純な代入だから性能もいいはず。
そんなものがあったのか!? けど代入元の型は文字列になってるけど数値を代入していいのか?
>>477 どの言語もできるような気もするが。 出来ない言語なんかあったけ? 化石のような言語のCOBOLでもできる。 COBOLだと9型の変数があって、VBA風にかくと Dim a as 99999 a = 123 でaを00123にしてくれる。 a=RIGHT("00000" & 123,5)なんてやってるのをみて驚いたわ。 ちなみに、MidステートメントはLetステートメントと違ってヒープ領域の再確保を行わないようなので めちゃくちゃいっぱい文字列を結合したり置き換えたりする文字列操作をMidステートメントで高速化できたりはする 色々注意しなきゃならんしめんどいけど
mid("00000",5-len(a),len(a))=a なんてやってるの?
文字列の一部分に0付き右詰めの数字を入れたいのだが・・・・ これがやりたい事なんだから A.MIDステートメントを使うなら右辺の値を5桁固定にする Mid(a,2,5) = Format(123,"00000") B.代入するの文字列を代入先の左側+5桁固定の値+代入先の右側にする a = Mid(a,1,1) & Format(123,"00000") & Mid(a,7,Len(a)) あたりに落ち着くのでは 自分は誤解されないためにもBのようなコードがいいと思うけど
自分なら right("00000" & 123, 5) って書く
いやどうせVBAでやるならNumberFormatLocalでやろうよ
みんなのコードカッコいいわ やっぱりコードはカッコ良くなきゃ舐められるわな
>>488 他に見るやつがいないなら動きゃいいとか思ってしまう てか若者とお年を召された方のコードの書き方が明らかに違うのだが、古臭い目新しいとかあるのかな?
今は可読性悪いのは駄目ってなってるけど逆に改行や変数名の長さすらケチってた時代もあった んで言語が進化するにつれて書き方も変わっていった 今でも昔の方法で書けるっちゃ書けるけどそれが古臭いってことだと思う
お年を召された方(60~70代)のコード見たら、やたら変数ばかり多かった印象が。 変数使わなくても普通に書けばいいじゃんて部分まで変数に入れていた。
>>492 今でもコード中に定数をそのまま書くのは別に推奨されてないぞ せめて別の人がコードを見た時に数字の意味がわかるようにしとかないとバグの元になる >>492 変数にいれないで普通の書くのか? 定数なら定数として定義すると思うが >名著「リーダブルコード」に「説明変数」という言葉が出てくる。
マジックナンバーは避けようぜ 後で見返す時に(この4って何を意味してるんだ…?)ってなると効率落ちる
郵便番号+電話番号ていう文字列があるんだが、郵便番号、電話番号を別々の変数に入れたいので こうしてみたんだがうまくいかない。 なにか手はある? いまType1は項目が2個だけど、なるべく一括で入れたいのだが・・・ Type Type1 Zip As String * 7 telnum As String * 11 End Type Sub Sample() Dim b As Type1 a = "151123408012341234" b = a End Sub
aの文字列が固定長なら Left(a,7) Right(a,11) でダメなんか
>>498 C系やVBなら可能だけどVBAではWin32APIを使わないと無理 また、可能だからと言って、複数の変数に一括でデータを入れるような書き方は可読性が下がるので推奨されない コードをコンパクトに見せたいなら代入部分を以下のようにモジュール化するのがマスト 電話をRightで取り出さないのは、固定電話は桁数が違うから Sub SetNumbers(ByRef T As Type1, N As String) T.Zip = Left(N, 7) T.telnum = Mid(N, 8, 11) End Sub >>498 若干無理矢理だけどクラス使えば似たような事は出来る Type1.cls Private Zip_ As String * 7 Private telnum_ As String * 11 Public Property Let Default(N As String) Zip_ = Left(N, 7) telnum = Mid(N, 8) End Property Public Property Get Zip() Zip = Zip_ End Property Public Property Get telnum() telnum = telnum_ End Property デフォルトプロパティの設定がちょっとトリッキー、こことかを参考に https://thom.hateblo.jp/entry/2015/02/16/003000 あとは Dim a As New Type1 a = "151123408012341234" Debug.Print a.Zip Debug.Print a.telnum >>487 何を目的とするかによるけど 速度は重視しないのであれば比較的周知されているBの方がいいのではと思うだけで 書き方なんて色々あるんだから試行錯誤すればいいと思う >>498 記憶があいまいだけど 長さの合計値が同じになる変数を持つ構造体を作ってそれをLSetで代入すれば可能だと思う Type Type1 Zip As String * 7 telnum As String * 11 End Type Type Type2 Value As String * 18 End Type Sub Sample() Dim b As Type1 Dim a As Type1 a.Value = "151123408012341234" LSet b = a End Sub >>503 それで代入だけは可能だけど、電話番号が10桁だと末尾に自動的にスペースが入って11文字に補正される 固定長文字列はTrimもできないから、結局構造体を使う方法はトラブルの予感しかしない >>504 与えられたデータだけの回答だからね 与えられた情報以外の事をあーだこーだいう人いるけど それはその時考えたらよくない? そもそもそういう事を言い出したら 質問のできるできないはできないって回答になるわけだし 与えられたデータっていうか、前提条件がはっきりしないからなぁ >郵便番号+電話番号ていう文字列がある 以外は試してみたっていうコードからの推測だしな まあおれなら合体文字列のセッターと郵便番号、電話番号のゲッターのプロパティ持つクラス作るかなぁ 中身はLeftとMidでいいんじゃね 固定長で最速を目指すならLSetもありかもしれんが 構造体うんぬんより、固定長文字列がトラブルの予感を感じさせるんだよなぁ、いろんなところで
固定長文字列って文字数で良いんだっけ? 全角でもおなじ?
>>507 文字数だから全角でも同じはず というか、文字列はユニコードってことになってるから全角とか半角とかないってことになってるんだよ、いちおう 関数2つ作ればいいのにわざわざ構造体やクラスつくる意味あんのかな 処理速度を気にするのは自力で動くの作れるようになってからだぞ
>>487 簡単にいうと、なんでもMidステートメントに置き換えれば速くなるってわけでもない(そういう使い方にはちょっと注意がいる) あと固定長文字列はいかにも速そうだが実は可変長文字列よりパフォーマンスが落ちることが割とあって、これまた扱いに注意を要する まずは自分の望む動作をするコードを完成させることに注力した方がいいんでないかな (速度改善や利便性向上みたいなのはなんていうか、キリのない作業でもあるし) >>509 クラス1つ作ればいいのにわざわざ関数2つ作る意味あんのかな、 って疑問を持つ奴もいるからどっちもどっち 自力でやれるなら好きに組めば良いけど それもできない初心者だからな
こういうやり方があるよって回答だけすればあとは質問者がそれを選択するだけでいいのに 他人の回答にケチ付けるやつはなんなんだろうと思う
>>513 質問の内容(仕様)が明確じゃない部分を好き勝手に解釈した結果 ユーザーフォームに毎回違う数のラベルを作った時に、それぞれのラベルでクリックイベントを作りたいのですが ラベル数が変動するので作れません。 こういう場合、存在するどのラベルをクリックしたかを調べるにはどうすればいいですか?
>>516 昔やろうとしたけど超しんどいよ vb6にはコントロール配列って機能があってそれを使えばよかったけど、 vbaでなぜかなくなっているので絶望的にめんどくさい 他の方法を考えたほうがいい どうしてもやるなら「vba コントロール配列」あたりで検索して頑張ってくれ。 https://www.asahi-net.or.jp/ ~ef2o-inue/vba_o/sub05_100_040.html >>516 ラベルは最大数で作っといて、必要な分だけVisibleで見せる >>517 他に方法がなさそうなのでこれでやってみます >>518 Private Sub Label1_Click() を1000個とか作るのはちょっと汚いので止めておきます まずどうして1000個も必要なのかのほうが突っ込みどころな気がする VBAってフォーム内でクリックした座標の検出できないのかいな
クリックイベントを1000個作るぐらいならクラス化しちゃうかなぁ どっちにしろ面倒臭いけど 大量にラベル設置した時のリネーム作業を簡単に出来る方法何かない?
いや普通につくるならプルダウンだろ 何かしらで分岐させれば3,4回の選択で済む
構内マップを作らされてその上にマインスイーパみたいな升目を作らされ、機器の設置場所を設定出来るようにしたい。場所の指定は分かりづらいから文字だけにするのはNGね。なんて業務を振られる事も稀によくある
何をどうしたいのか知らんし、その1000個の元データはどっからどう持ってくるのかしらんけど Excel VBAだしな 俺ならシートで選択させてフォームのボタンかな
>>524 で、それを実現するのがEXCEL VBAでラベル1000個なのか? いろいろ検討して最終的にそれしかないとなったならまあご愁傷様 そうじゃないならあほとしか思えん それしかないじゃなくてそれしか許されないんだよ アホかって思いながらやってるよ
マス目なら座標取ればいいような気がするが許されないなら仕方がないな
a=郵便番号電話番号 b=Left(a,7) c=Replace(a, Left(a, 7), "")
1000ならまだいける、10000だったら逃げるけどな
ワークシートの背景をマップにしてセルクリックでイメージを表示するイベント書けば?
昔ながらの紙の地図帳をイメージすればいいのか 最初のページで全体図をマッピングした概略図を掲げといて 詳細の判るまで拡大した一ページ(※)をマス目で区切って、縦に 1 2 3 横に A B C とか振り分けて 例えば B 4 とかをクリックしたら「設備名」の詳細を表示するとかか? ユーザーフォームでそれぞれのマス目を呼び出すよりは、インデックスのSheetに全体図 そこをクリックで各Sheet (※)へジャンプとかのが楽そう 上が承認するかどうかだけど 上に承認してもらうようにサンプル作ってプレゼンしてもいいし
コントロールフォームの動的配置 & クラスモジュールでイベント起こすに一票 どうせどこかでイベント共通化の処理が入るだろうからスケーラビリティ確保のためにも
>>534 うぬ、それが一番だと思うけど何故にエクセルなのかと思ってしまう 1000個のラベルと見せかけて、 実は1個だけラボルが混ざってるんじゃないだろうか。
テキストファイルを開いて1行ずつ中身を読んでます。 Open ファイル名 For Input As fNo Line Input fNo, buff 途中まで読んだあと、先頭から読み直したいです。 ファイルを閉じてまた開くのは嫌です! 下のURLを参考にして、 FileSystemObjectを使ってすべてを1変数に読み込み 改行コードで区切って配列化して 先頭から読み直したいときは配列の先頭から読みなおし という方法を思いつきましたがコード修正が大変なので もっと楽な方法をご教示いただけたら幸いです。 https://bokulog.org/vba-read-file/ >>529 1桁足りないじゃんって思ったら Optionbaseデフォルト値でやるのが普通なのか? 俺はどうにも馴染めないので1でやってるが どんなコード書いててそこからどんな手直しするかわからないのに回答のしようがないよね
>>537 ファイルを閉じて開き直すのが祖谷な理由が書かれてませんので 嫌でもやればいいんじゃね IE終了したけど、今日の時点ではVBAからIE操作できた。いつまで保つか明示されてる?
サポートしないだけで PC内にIEがある限り 永久に使えるんじゃないか?
そのうち深刻な脆弱性が見つかったらセキュリティソフトでウィルス扱いされるようになって、 IEコンポをロードした瞬間にウィルス警告が出るようになるだろうな
WannaCryのときMSはサポート外にパッチ出しちゃった前科あるからなあ なんだかんだ面倒みそうでなあ
>>547 何の根拠もないな 危険な脆弱性が明日見つかったらそれで終わりだよ >>540 Seek命令あるけど、あれランダムかバイナリモード用だと思う が、試したがシーケンシャルファイルでもバイト位置で指定できるな IEで終了したのは「アプリ」の「サポート」だけだぞ IEオブジェクトはしばらく残すと明言してるから、マクロから使うのはまだ問題ない けど、猶予期間の今のうちに社内ルールの変更など根回しはちゃんとやっとけよ
IEが非対応のサイトも増えてくるから対策出来るならした方が良いのはわかってる が現状Selenium Webdriverが最適解のようでいちいちバージョン合わせるためにダウンロードしたり記述が変わったりすげー面倒 MSがどうにかしてくれると淡い期待をしたいが
Edgeに限らず、新しくなって使いづらくなるのホント意味不明。 PC起動するとWindows11にしませんか?って言われるけど、もうお前なんか信用しとらんわ!
まぁしょうがない 良かれ悪かれ何でも時代の変化で変わって行く VBAは関係ないけどちょっと前にとあるシステムで IE → EDGE の移行作業行ったよ 開発ツールは確かにIEの方がEDGEより 使いやすかったと思う。慣れだろうけどね。
世の中がセキュリティに舵を取るようになったからね 楽観論じゃなりゆかない時代なんだから仕方がない
セキュリティを理由に広告ゴリ押し こうはなりたくないね
ExcelもIEも何年も使ってないわ kneetじゃねーよ
VBA無くなればこのスレも下火になるかもな。 パワークエリスレが活気出る
PowerQueryは万能じゃない VBAと比較するもんじゃない
PowerShellは万能だぞ ExcelのワークシートもWEBブラウザも操作できる
デフォのPS 5.1はクソだけどな BOM付きUTF-8を要求したり権限厳しかったり
万能かもしれんがVBSみたいな手軽さが無いのがな…
Power shellは .Net Freamworkが入ってなければただのShellだもんな なら素直にVSの類いれとけばいい
Powershell 7は.NETと関係ない汎用のコマンドラインシェル macOSやLinux向けの製品すら存在する
追加でWebからインストールしなきゃいけないPowerShell(6以降)に存在価値はない それが許されるんならあえてPowerShellなんて使わずとももっと優れた選択肢がいくらでもある
Win11でもオプションなの? うちいまだにWin10だからわからん
win11でも入ってるのは5だけ 6以降はサポート期限がLTSでもリリースから2年しかないから、 仮にWindowsにプリインストールすると2年ごとにWindowsの更新で強制的にメジャーバージョンが上がって既存資産がぶっ壊れるリスクが生じる だからどうしてもユーザーの自己責任で塩漬けにできる選択肢が必要で、Windowsの一部として扱うことが不可能なんだよ
質問です ある動画で「連想配列とユーザー定義型を組み合わせると便利」ということで色々勉強していたのですが、ユーザー定義型ってpublic宣言しても別モジュールで呼び出せないですよね? てことは別モジュールにプロシージャがあって、それを引数設定して呼び出してもエラーになりました そこでクラスモジュールを使っても同じような事ができると聞き、クラスモジュール内に3つ型を宣言した変数を作ったのですが、それを配列に入れようとすると「配列に入れることができません」というエラーがでます 具体的には以下のとおりです Dim c() as class1 Set c = New class1 ←ここでエラーがおきます この記述を Dim c() as New class1 とすればエラーは起きないのですが、別モジュールの引数に sub test(c as New class1)と記述はできないので困っています なにかいい方法はないでしょうか?
すみません 私の勘違いでした 普通にユーザー定義型でできました
うさんくせー セミナー屋ほど胡散臭いのはないわ、 やっぱ5ちゃんねるが一番!
嘘松藁人形 手作業大好きおじさんが一人いましたって面白くもない話
「ミスが起こるような仕組み」でなくて、 まるっきりブラックボックスでもなく、 人が過程を辿れるようなの、作りたいな・・・ とは思う。
完全にネタ、作り話だろこれ そもそもVBAごときでミスが起きないシステムなんて作るの不可能だし マクロはたくさんある工程の一つに過ぎないんだから、業務全体で見ればミスが起きる余地なんてほかにいくらでもあるだろうに
話題にするだけばからしいでしょ こんなの言ったもん勝ちだしね
ブラックボックスでミスが見つけられない を独自解釈しただけだろ
>>581 どうせDebug.Printするんだろうからデバッグモード付きで納品すればいいんじゃね マクロの作成頼まれたけど要求内容があまりにも怪しかったので、 マクロと一緒に「入力に対する出力が合っているか」と「そもそもの入力が誤っていないか」を簡易的に(電卓などで)求められる計算方法を渡した そしたら約3ヶ月に一回ぐらいの割合でそもそもの入力すべきデータを誤っていたことが判明した ってことはあったな 後で調べたら、こういうのは「封筒裏の計算」っていう手法らしいけど
>>581 保存期間なり世代管理してログ出力すればいいでしょ >>586 祝儀袋の封筒に書かれた金額と入っている金が違うやんってことか なるほど日本人はうまい例えを作るもんだと思ったら全然違ってた Excel2013のVBAで Debug.Print (1 = 1) * 1 てやると-1になるけど、 セルで =(1=1)*1 て入れると1になる。 これって不具合?
ワークシート上の(1=1)、つまりTRUE値は「1」だけど VBAでのTrue値は「-1」だから合ってる
VBAは好き どんな職場で働けばいいの? 正社員じゃなくていいです。
>>593 事務派遣。 ゆるい職場ならvba使用が禁止されて無いから与えられた業務で使って見ればいい。 ワイまさに派遣事務でたまにVBAやってこちらのみなさんにお世話になってる(*´ε`*)
>>593 日本で働くのはやめておけ 将来性無いぞ >>593 派遣おすすめ vba縛りの事務なら、めちゃくちゃ楽で定時に帰れる そういう人を見たことある 一生生きていけるだけの金もってたら、 そういう人生送りたかったってぐらいやりたい生き方だわ 生涯困らない金があって、VBAの事務作業か もっと他に・・ いや、どうぞご自由にだけどさ
>>598 一時金持っててさ、毎日酒のんでゲームしてパッパラパーな人生送ってたのよ 当然、あっという間に体壊して病院行き 適度な仕事は、自分の健康につながるよ VBAしかできないやりたくないような人だとしたらそのような人を使ってくれるところは少ないのでは・・・ なのでここで聞いてもいい回答はもらえないでしょ
いまさらVBAには関わりたくないな そもそもVBA自体よりもVBAを使ってる連中と関わりたくない
なんでココにいるのか? ってツッコミ入れたら負けなんかなw
ちがうでしょ、所謂かまってちゃんでしょ。 慰めてやるべき
プログラマからしたらVBAしか出来ないって使えないやつでしかないからなぁ
>>606 無知なのにテキトーに言い過ぎ vbaは特殊で、保守がメインの現場ばかり。vba使えればそれでいい 立ち位置的にはCOBOLに近い >>607 世の中を知らなすぎ どんどんVBAは消えていってる MSすらVBAではなくPython導入しようとしてたが、 openpyxlやxlwingsの出来が良かったのでそれらを薦めてるんだよ 突然IEのサポートが終わるとか言ってる奴くらいだぞ知らないの >>608 ? だから保守メインって言ってるじゃん 新規開発なんて無く基本的に別言語とは関わりがない そのツールでできるならどんなの選んでもいいだろ >>608 みたいなのはそんなこともわからず俺こんなの知ってるぜスゲーだろって言いたいだけのかまってちゃんだろ VBAはそもそも基本的にWindowsPCなら入っているであろうExcelさえあれば 他に何も入れなくても使う事ができるという1点で他にはない優位性があるわけだし 職場によっては変なものを入れるのはNGみたいなところもあるんだから そういう事も踏まえないでただ批判だけするのはおかしい話 >>609 VBAからPythonへのリファクタリングが進んでるって話だよ リファクタリングって新規開発ではなく保守なんだけど理解できないようだしなw 今後もVBA使っていくつもりなら、 VBAがやがてどうなるとか調べるのはかまってちゃん以外でも当然の行為だろ ましてや仕事なら尚のこと >>612 へぇ、それは知らなかったわ、物知りだな~ 具体的にはどんな案件がvbaからpythonになってるの? エクセル・accessの簡易的・汎用的な入力方法を全部捨てて、 pythonで作り直す案件とはどういうものなのだろうか? 概算するまでもなくものすごく高くなるんだけど、一体どういう案件だとコストダウンになるのだろう? 早く回答してほしいなぁ。まだかなぁ
>>614 openpyxlやxlwingsって具体的な名前出してるのに調べたり理解できない奴が煽ってるのか 無知な上に調査も思考もできない役立たずがVBAだけで食っていくとか何の冗談だよ VBAだけじゃなくて、Excelの一通りの知識も必要では? 事務員なら
>>615 おう見落としてたわサンキューな 勉強してくるわ 案件って言ってるのに > openpyxlやxlwings とか、アホ丸出しやんw
>>620 なんで?>>595 だけどVBAやらされることもあるんだけど、、 まあ大したものじゃないけどね(^_^;)ちなみに女です。 >>619 内容説明してみ まあ必死ではぐらかすんだろうけどw >>622 これがあればvbaをpythonに置き換えるコストがクッソ下がる。案件は基本的に何にでも対応できる なかったらめちゃくちゃなコストになるから非現実的だと思ってた >>623 > openpyxlやxlwings の説明なんて要らんよ > 具体的にはどんな案件がvbaからpythonになってるの? の回答よろしく >>624 知らんよ。俺は見たことない どんな案件にでも対応できるからユーザー側がpythonを指定して発注することは少ないだろう 開発側の好みでpythonを選んでいるだけだろうな webサーバーで処理するという点ではエクセル→スプレッドシートの移行にかなり近い。 知らんのならいちいち絡んでくるなよ... そもそもどんな内容が伝わると思ってたんだよw
何でも低コストで作れる以上、具体的な案件なんてもう必要ないだろう
会社の人事部の仲良い人に聞いたけど、派遣君でVBAできるヤツは希少な人材と言っていたぞ ましてやExcel自体まともに操作できない派遣が多い中で。
まぁ手広くやるかVBA極めるかだろうけどある程度は手広くやらないとね 「VBAは死ぬ」と言われてもう随分経つけど一向に死ぬ気配はないのは確かだけど VBAしか出来ないとOfficeに乗っかったアプリしか開発出来ない井の中の蛙状態になるのも確か。 それに他言語やってるとその言語の考え方も取り入れてVBA作るようになるから何かひとつやるにしても取れる手段が増えるんだよね。 まぁ個人的にはPythonは下手に手をつけると算数しか出来ないバカな俺には数学出来ないといけないお仕事が降ってきそうでちょっと敬遠するけど。 後JAVAは個人的に肌に合わなかったのでやって良かったってなるのか分からないけど、 JavaScriptはWeb系やるならまず必須になるし、とりま後はC#辺りやっとけばいいんじゃないかと思う。
後、このスレには俺みたいなジジイが結構いるみたいだから話しておくと、 遠い昔まだPCがマイコンとか呼ばれていた頃、すがやみつるって「ゲームセンターあらし」とかいう漫画描いてた人が「こんにちはマイコン」ってBASICでブロックの無いブロック崩しみたいなののプログラムを作る工程を漫画で説明しながら描いてたんだけど、 ちょっと前に「こんにちはPython 」って同じ感じの内容をPython でやってるのを出してたから話のネタに買ってもいいかも知れないよ。 ただ、新品買うほどの価値があるかは微妙だから中古でもいいと思うけど。 まぁスレ違いだからこの辺にしとくわ。
activecellを使って掛け算をしたい時どうすればいいのか分かりません 教えていただけたら嬉しいです。 inputboxで数値を入力してその数値を使って計算したいです。計算する時にactivecellを使いたいです
>>631 Sub foo() Debug.Print ActiveCell.Value * InputBox("") End Sub 難しい話ね。 これから他の言語も必要なら習得の必要あるしね。
VBA覚えるの大変ですね 理解してコピペできるくらいにはなりたい
一度VBAエキスパートとか取るくらい勉強すれば 毎回Offsetの横は行が先か列が先かどっちだったかな?って(Resizeでも同じことやってる)やってるワイでも 大体コピペで作れるくらいには成長するよw
>>637 ありがとう やってみるか 参考書検討しようかな コピペしたVBAってみんな捨てて去ってるのかな、貰ったことないかも。
コピペはダメと教わったがな最初の会社で。 あちぃなしかし今日は
コピペしてそのまま使うことはほぼなくなる コンパクトにまとめないと、後で見て何書いてるかわからなくなる
ネットにうpしてあった100行のやつをコピペして100000行にしてる、コンパクトという発想がなかったわ。そもそも意味わかんない行もあるけど消すと動かないし。 後任に渡そうと思ったけど恥ずかしいからやめとくか...。 おまえら上級者なんだね。
VBAはコピペして動くからいいよな。 Pythonはだいたい動かない。 しかも、Pythonのページ作るやつて 断片的にソースを乗っけるから、なおさら動かない。
コピペして動かすのって怖くないか? 少ない量ならまだしも100行だと何が起きてもおかしくない
それを修正できるスキルがあれば別かもだけど、なかなかいないのでは
ネットソースだとwsの指定とか省略されててコピペじゃ怖くて使えたもんじゃない
自分で一から書ける能力があればわざわざコピーなんざしないのさ。。。(-_-) 切り貼りつぎはぎだらけで変数の宣言がぐちゃぐちゃになってる 分かってくれる人いないかな(笑)
コピペが悪いのではなく、コピペで作ったコードを自分が提供した責任があるのだよ
>>649 自分だけで時間短縮のために使ってるマクロだからそんなに困らないよ みんなに配布するレベルはこれからもしないと思う^^ >>648 分かるけど理解はしない それを許したらそこでおしまい 書ける能力あっても今までに作ったコードをコピペするだろ? 場合によっては共通関数の入ったモジュール程度を持ってくるにしても お前らもしかして同じこと1から書いてるの?
別部署に行って、「規則が変わるからこのマクロも修正してくれ」って言われ、中を見てみたらセレクトメゾットやコピーメゾットが使われてた時の絶望感 「クリップボードの履歴を有効にしていると正常に作動しない事があるから必ず無効にしてくれ」ってそれ書き方おかしくないか? そして変数の宣言が強制されていなくて更に絶望する
>>654 と言うより、作って使用したらマクロは消しているのです。 再び必要になったら1から書いてますはい。 職場のローカルルールとして。 >>657 ないわー 関数自体が使いまわし前提の考え方だし >>654 理解しないでコピペするか理解して書いたコードを使い回すかの差は途轍もなく大きい それどころか回りの奴らはVBAにしろExcelの学習すらやろうとしない。 仕事終わったら飲みに行く事しか考えていない。休日も何も努力しない現実。 興味ないヤツには進めてもダメなのかな
VBA使いに向上心を求めるのは酷でしょ それがないからこそVBA止まりなのに
>>660 自分が使うのは勝手にしろだけど、それで優越感に浸って「周りの奴らは~」とかキモすぎだろ たかが仕事で使うの1つのツールごとき にここまでイキれるのはヤバいわ 他はすべて負けてるから何か一つでも勝てるものがほしいんや
>>647 それってコピペしただけじゃ動かないってことよね? 動くように自分で指定すると思うんだけど、こわいってのはどういう事なんだぜ? 勝利するかために複雑な知識や技術を身につけているのだが?? 間違ってる?
>>665 wsを指定しないとActiveSheetで動こうとするから誤作動の原になる Webbrowserで証明書を自動選択する方法は無いものでしょうか?
他言語やったからって excelやVBAでやったことが無駄になることはないよ 他の言語で作ったもののUTのエビデンスをとるのに excelがもし無ければと思うとゾッとするし テストデータ作成にもVBA使うととっても便利な場合が多いし
エクセルのある列に数字が入ってます。 そのエクセルと同じ階層にあるフォルダの下に 上記の数字から始まる名前のフォルダがあります。 (数字のあとに日本語が付いてます) このフォルダの探し方を教えていただきたく
会社のパソコンでVBAを使って pdfをテキストへ変換しています。 (com.adobe.acrobat.plain-text) 変換処理は不安定でエラーが出ることが多いが 成功することが多いです。 しかし有料ライセンスは一切買ってもらっていません。 これはライセンス違反ですよね?? 違反ならもうやめます。
>>672 num=cells(行,列).value dirname=dir(thisworkbook.path&"\"&num&"*",vbDirectory) dirname=dir(thisworkbook.path & "\" & num & "*", vbDirectory)
>>673 PowerQueryでもAdobeのAcrobatなしで pdfをある程度変換出来るけど? クラスが入ってるCollectionの要素を置き換えるにはどうすればよいでしょうか? Set col(2)=New MyClass() とやってもできないんです。
>>680 そうですか ありがとうございます でもなぜ置き換えできないのでしょう? そのしくみを理解したいのですが スキルがあがるステップだと思うので IEの入力欄に値いれるマクロ使ってたんだけど、エッジに移行して動かなくなったんよ エッジの入力欄いじる方法ってご存知ないですか? 調べてもよくわからなくて
まだInternetExplorer.Application は有効でしょ サポートは切れたが動かなくなる訳ない
なぜMsedge.Applicationにしないの?
クラス(例:MyClass)が入ってるCollectionの要素(つまりMyClass)をある条件でsortしたいのですが 簡単な方法はないのですよね? これは標準モジュールにそのソート用のsubかfunctionを書くのが一般的ですか? 「ある条件」というのが複数あるので、複数個それを作るのが面倒。 あといま思い付いたけど、そのCollectionをメンバとして含む親クラスをつくり、その親クラスにその複数のsortに相当するfunctionを作るのがカッコイイです?
たぶん用途的にArrayListが良いと思う >>687 VBAのマクロ名てなにか制限ある? Sub n98() MsgBox "a" End Sub というマクロを作ったんだが、実行できない。実行ボタンがグレーアウトする。 しかも、マクロボタンを押すとセルカーソルが彼方に飛ばされるんだが。
>>689 ワイはそのコードコピペしたらちゃんと動いたよ モジュールのコード上でF5キー押してみたら? マクロ名の制限ももちろんあるよ ググればすぐ出てくるはず だけどこのコードのマクロ名は問題無い
>>690 VBEでF5なら動くが、 エクセル本体で開発タブのマクロボタン押すとああなる。 ちなみにバージョンは2013。 マクロ名が英字2字+数字だと、マクロボタン押すとそのアドレスのセルに飛ばされるな。 もちろんマクロは実行できない。 そんな制限あったけ? セルのアドレスて「予約語」になるのか? >>689 excel2010だけど全く同じ現象が起こるわ F5からじゃくてAlt+F8な この画面開いたらn98セルに行って勝手に選択(コピー?)してくれる 逆に、alt+f8でマクロを開いた状態でセル選択するとテキストボックスに反映されるので、 ここは参照かなにかで連動してるっぽい >>694 予約語とかセル番地名、数字始まりは駄目 >>695 セル番地もダメだったのか、ウソついてごめんなさい For each i in collection if a=1 then if b=1 then if c=1 then Debug.print "うんこ" end if end if end if next i こんな階層はしないほうがいいですか?もしそうならどうすべきですか? ちなみに実際の条件文はa=1などのように単純ではなくてもっと複雑怪奇で長い文字列です。
インデント揃えてれば良いんじゃない? それかある程度深くなったら別ルーチンや関数に飛ばすとか
if a=1 and b=1 and c=1 にすればすっきり
>>700 VBAはショートサーキットじゃないから遅くなる >>695 それどこかに書いてある? まあ予約語や数字始まりがダメなのはわかるけどセルアドレスは盲点だわ >>698 何がしたくてそのIF文を書いてるかわからないけどELSEに対しての記述がなければ>>700 みたいな書き方にしてもいいけど 自分はその程度のネストは許容範囲だけどね それとなんでしないほうがいいと思ったかも書くと他の回答もらえるかもね Excel2021でも再現したわ セル番地はモジュール名にできないのか、知らんかった 捨て変数とか作業ファイル名なんか普通にaaa1とか使ってるから、いつひっかかってもおかしくなかったのに 思い返してみると、なぜか捨てSubはtest1とかmacro1にしてた
今わかってる範囲では、モジュール名にできるけど挙動が少しおかしくなる 避けられるなら避けたほうが無難だろうね
>>692 英字1文字でも3文字でも飛ばされる なんかの裏技に使えそうな気がする 遠くのセル範囲をちょっと確認したいとか >>698 いわゆる早期リターンとかガード節ってやつ For Each i In Collection If a <> 1 Then GoTo continue If b <> 1 Then GoTo continue If c = 1 Then Debug.Print "OK" End If continue: Next >>708 自分としてはもともとの判定を変更するような回答はどうかと思ったりするんだよね 複雑怪奇とかいてるのでわかりやすい回答なら「if not (a = 1) then」にしたほうがいいのではないかと それとそこまで書いたらcの判定もcontinueで飛ばしたほうがすっきりするかと >>707 マクロじゃなくてジャンプでいいってなるんじゃ >>698 内容がわかるようにコメントつければいいんじゃね >>705-706 モジュール名にはできないけど>>694 のは手続き名だからモジュール名で修飾(※)すれば呼び出せるよ ※ マクロ名の欄に直接 Module1.n98 のように入力する >>698 一般論としてネストは浅い方が理解しやすいからそのコードであれば>>700 や>>708 みたいにした方が読み易い ただ>>701 が言うようにVBAにはショートサーキット(短絡評価)がないので遅くなるのはいいとしても If N <= UBound(A) And A(N) = 1 Then ... みたいなのは If N <= UBound(A) Then If A(N) = 1 Then ... のようにする必要がある まあ、複雑な判定するならメソッドに切り出すのが間違いないわな VBEだとIDEのサポートないから若干めんどくさいけど
>>698 賛否あると思うが For Each i In Collection: Do If a <> 1 Then Exit Do If b <> 1 Then Exit Do If c <> 1 Then Exit Do Debug.Print "OK" Loop: Next みたいな書き方もある 最後の行間違えた Loop Until 1: Next
あんまりにもネストするなら、判定文(if複数)だけ別プロシージャ(Function)として外出しして、TrueかFalseを返させるようにするかな IsGoukaku みたいなプロシージャ名にすると何したいかがわかってメンテ楽だし
セル番地がダメならダメでいいけど、あんな挙動をするのはバグだよ。 本来はメッセージだして弾くべきじゃね? office365でも同じならだれかMSにチクってみてくれ。 以前、MSの掲示板にWinの不具合を書いたら、 速攻で消されたが、 こっちでも確認できたから開発にレポしといたていうメールが来て感動したわ。
>>700 if a=1 and b=1 and c=1 にすると内部では判断を3回することになる。 if a=1 then if b=1 then if c=1 then にすると判断は少なくなるのだから、ネストするほうが正解じゃね? もちろん、ifを書く順番は判定が少なくするようにする必要はあるが。 頻度はwindoewsやエクセルに比べたらかなり低いけど、やってるよ 確かちょっとずつ便利になってる。本当にちょっとだけ。関数が増えたりはしていないはず。 ソース探したけど見つからねぇ
ふーん。。 まあ元号はあったね。。 古臭いよね。。
どなたか教えてください。 売掛金消し込みのマクロを作成しています。VBAでソルバーを自動化したいと思っています。 目的セル、制約条件の参照セルの開始行が40行ごとに下がっていき、指定値は数値ではなく、セルを指定したいです。 とりあえず、全部の変数をvariant型にしてますが、なかなか上手くいきません。
731です。 sub ソルバー() dim 振込1 as variant 振込1=worksheets("ソルバー").range("n2:n8") solverok setcell:= worksheets("ソルバー").range("i3"), maxminval:=3, valueof:=振込1, bychange:=worksheets("ソルバー").range("e2:e40"), enginedesc:="grg nonliner" solveradd celreff:=worksheets("ソルバー").range("e2:e40"),relation:=4 solversolve userfinish=true
>>733 ソルバーを実行しても、目的セルが0のままで指定値にと一致する金額の組み合わせが見つかりません。 どの請求分の入金なのか、突合したいです。 >>734 ソルバーわからんから確認させてください 振込1って変数は配列に入れた値を指定したいものですか?それともセル自体を指定したいものですか? 前者であればそれでいいですが、後者なら変数はRange型にする上で代入時に Set 振込1 =〇〇 としないといけませんが… 連投すみません。 変数宣言して、for〜next構文でe列を("e"&i+40)や、n列も("n"&i+40)みたいにしたいんです。 d列には請求金額、e列は空白、目的セルにはsumproduct関数が入ってます。 指定値セルはn2:n8で、それぞれ違う金額が入力されてます。入金額とn2:n8内の金額が一致する組み合わせの請求金額をVBAを使って、求めたいです。
>>735 ありがとうございます。 ヘルプを確認したら、指定値はバリアント型で書けとあったので、なんとなくvariantにしていました。 とりあえず、rangeで回すんじゃなくてcellsで回したら? n列はcells(i,14) e列はcells(i,5)で
>>739 sub または functionが定義されませんエラーが出ます… >>739 cellsも以前試したんですが、上手いこといきませんでした こんな奴が作るプログラムで金勘定とか笑えるわ 己を知らないって馬鹿の特徴なんだよな
ソルバーってカタカナで書くの余計分からないよ 素直にSolverで良いだろうに 上の困ってるのは一旦マクロの記録で動作確認お薦め
Excelは万能ではないから会計ソフトでやるべき事柄
この世で最高のコードを見かけた With Range("F27:F56") .Value = .Value End With
>>748 それの意味解る? ちょっと前に同じ様なコード載せてた人いたけど 複数範囲は一度に設定できないって嘆いていたよ >>732 solverを使うときのパラメーターの設定の方法が間違ってんじゃない。多分値渡しではなくsetを使うと思うよ。 まずマクロの記録もう使ってなんでもいいからsolverで問題を解いてみて、solverを使うときの正しいVBA の書き方を確認しなさい。 >>698 Ifなんたらかんたらを使わないで B2になんか文字が入っていたらC2を B3になんか文字が入っていたらC3を… をスマートに書くならどう書きます? >>751 こんな質問してマウントとりたいんだろうか・・・ こんな質問するならそのスマートな回答も書いておけばいいのに VBA使わなくてもセルに関数書いときゃいいんじゃね
>>751 お前Access VBAスレにExcelの質問書き込みするんじゃねーよ 迷惑だ すみません、神様達、教えてください エクセルVBAでは 関数内関数はどうやって作れますか? また複数の関数を目的別に整理する方法として パッケージやモジュール単位にまとめたり マップに収納したりはできるのでしょうか?
>>755 できる vbeエディタウインドウを凝視しているとやり方が判るはず >>756 ちょっと凝視してみます >>758 疑似コードですけど例えば、 Function out() Function in1() End Function Dim a=Function in2() End Function out=Array(in1,a) End Function みたいな感じで 関数outの中に関数in1を宣言したり 変数に関数を代入して、returnしたりしたいのです ローカル関数もサポートされてないし 関数をオブジェクトとして扱えないので変数への代入も無理です
>>756 標準モジュール単位で関数をまとめればいいってことでしょうか? >>760 ありがとうございます なるほどです すっきりしました、神様ありがとう モジュールを使いながら関数を整理するか 関数用にファイルを作って管理するかします それからモジュールには適当に名前を付けることができますので
関数内関数ってのは、関数の中で定義する関数のこと phpだと sub foo1 if a = b then sub foo2 foo2=1 end sub else if sub foo2 foo2=2 end sub end sub みたいなことができる あんまやらんけど
>>759 関数内関数をそこで書いているようなやり方ではできないけれど、どうしてもやりたければ vbe オブジェクトを定義してそこにコードを書き込むという疑似なやり方はできる。あるいはコードを作成するプロシージャを作成してそのプロシージャを呼び出して引数を渡してコード作った後、そのコードを呼び出すみたいなことはできるのかもしれない。 コードを実行中に別のコードを作成するという経験がないんでエラーが出るかどうかは分からない。 ただ面倒だし見通しも悪くなるんで外側で関数を定義した方が簡単だと思うんだけれどなぜ関数の中で関数を定義したいのでしょうか。 >>766 ありがとうございます vbaがエクセル前提の言語と考えると 私が考えているような関数は使うべきでもないのだなって思いました 神様たちのアドバイスに感謝です ありがとうございました >>766 なぜ関数の中で関数を定義したいのか すべての関数を同列に記載すると見通しが悪い気がして 例えば数式に関するものなら、calcurationでまとめ 出力に関するものなら、printでまとめ 保存に関するものなら、saveでまとめ っていうように、目的別、機能別、階層別に関数をまとめると 後で見直したときに分かりやすいかなって さらにfacadeみたいに間口を作れば 拡張も修正もしやすいかなって思いまして >>755 >関数内関数はどうやって作れますか? 関数内関数はない classは貧弱だけど、ある ただvbaそもそもの概念として、エクセルのスクリプトであるという点がある あんまり大きなclass作りたいなら、別言語の方が良いと思う エクセルvbaはゲームとかもキツイ(メインloopが超貧弱でvbaを起動しっぱなしだとよく落ちる) >また複数の関数を目的別に整理する方法として >パッケージやモジュール単位にまとめたり >マップに収納したりはできるのでしょうか? 標準モジュール単位でまとめられるけど・・・ エクセルvbaの標準モジュールは「どのシートにも共通する処理」のような意味合いで用いられる よくも悪くも、vbaはエクセルのためにあるので あまり壮大な事をするのには向いていない >>770 class調べてみます! モジュールとclassが使えれば 見やすいコードかけるかも! そんな壮大なプログラムを作るつもりなないのですけど 一処理、一関数にしたいとなると ある程度の単位で処理をまとめていきたいなって ご丁寧なご解説に感謝です ありがとう、神様! >>750 アドバイスありがとうございます! 入金消し込みの自動化をせよと上司からの指示で、初心者なりになんとかやってるんですが、会計ソフトの会社でもお手上げな仕組みの売掛金管理のようです。 setとcellsでなんとか、試行錯誤してやってみようと思います! またわからなくなったら、質問させて頂きます。 十年近くぶりに触るし上級者だったとかじゃないけど VBAで 今開いてるPhotoshopの選択しているレイヤーを基準にExcelの指定セル範囲(例:A1からA20)を1セルごとにレイヤーを1枚作りセルの中身を文字ツール(テキスト)でレイヤーを作成。 例:ExcelのA1に「あいう」、A2に「えお」、A3に「123」が入力されていたとし、指定範囲選択(A1〜A3)を、開いてるPhotoshopにレイヤー追加しながらテキストレイヤー「あいう」、「えお」、「123」を作る(計3枚)。その際、Excelに近い見た目の形で…この場合、横に少し間隔を空けて「あいう」「えお」「123」が並ぶように作成する。(文字の大きさや色は直前に使ったpxサイズ、色とする) って出来ますか?
いや、関数内関数? まぁ似たようなものはあるよ。 GOSUBってのが。 ただ、これも負の遺産のひとつだから あまり使うことはお勧め出来ないけど。
関数内関数いわゆる高階関数について、VBA関数には高階関数のための機能は無いけどワークシート関数のLAMBDAが該当する
>>776 お前名前に騙されやすいタイプだろw LAMBDA は単なる関数定義で VBA スレ的にはユーザー定義関数と変わらんぞ ユーザー定義関数はマクロブックにしか入れられないから LAMBDA が作られた 他のプログラミングと同じだと思われているのかな LAMBDA 関数は
>>778 ありがとう そこのページ起点に頑張ってみる 関数型パラダイムをサポートしている言語か、最低でもC言語などで関数ポインタを使ったことがある人でないと高階関数の概念は理解が難しい
>>781 高階関数の話ならそこに書いてあるMAPとかSCANがLAMBDAを受けられる様になったことを言うべき あと関数内関数と高階関数は全く別物だし実行中に定義できるかかどうかも関係がない ネットの記事って怪しかったり間違っているのが多々あるよね
.Netでもひとつの壁と言われているラムダ式が VBAどころかEXCELで使えるようになるのか。 胸熱だが脱落者も増えるだろうな。
脱落者なんて増えないさ 世の中にエクセルの全機能使いこなしてる奴なんていないからな 理解できない機能は使われないだけだよ
>>791 読んでてよく分からんかったけど 要はアセンブラでいうところのアドレスの間接参照とか 間接修飾とか言われているやつで .NetではDelegate、VBAではCallByNameによるコールバックって理解でいい? VBAでできない事をダラダラと話さず別スレいけばいいのに
Excelで例えるなら関数を特定のオブジェクトのメソッドとしてではなく、それ自体を実体のあるオブジェクト(あるいはコレクション)と見做すようなもの 利用側の関数内で関数オブジェクト(のようなもの)を参照する手段として関数そのものをラムダとして扱う
エクセルもVBAも詳しくないんですけど VBAは非同期処理でコールバック関数を使わないんですか?
>>794 高階関数っていうのを最近覚えたんだろうな 関数内関数に1mmも関係ないのにしつこく語ってる 他の言語スレだと瞬殺されるレベルだからこんなスレで管巻くしか無いんだろうw >>799 コールバック関数を使えるのなら 引数に関数参照できるということです? なら変数に関数を代入できそう >>797 非同期処理はイベント処理に依存してるってことでしょうか? コメントありがとうございました VBA初心者なのでいろいろ勉強していきます >>800 特定のオブジェクトやクラスに所属する関数やAPIなどシステムで定義された関数(メソッド)であればコールバック関数で参照することはできる グローバルのユーザー定義の関数はラムダ式で記述するなどの手段を使わない限りは無理 コールバック「関数」とはなにを指してるんだろうかねぇ コールバックを実現する手段はイベント以外に CallByNameとかApplication.Runとかでまあ実現できなくはない
コールバック関数は何を指しているのか なぜラムダ式が存在するのか 即時関数とラムダはどこから分岐していったのか 関数プログラミングは本当に有益なのか 本当に変数は悪者で動的型付けは悪なのか それらはもはや哲学なのかもしれません
>>783 自作の階乗作らせりゃ一発だろ。Cの関数へのポインタとか、可読性0に近い。組んでて楽しいけど、1ヶ月後の自分はこれを理解できるだろうかという疑問が湧くw まぁでもあんまりVBAでコールバック使う機会ないかな 呼び出しや生成元のモジュール側の関数を 呼び出された側や生成された側から呼び出すときに 密結合になるのを避けるためくらいにしか使ってない
>>807 エクセルVBAでDBのデータやファイルデータを読み込むとき 非同期にならないように処理するってことなんでしょうか? 例えばフラグを立ててdo-while、breakで処理待ちしてから次の処理に進むとか? webのように処理と表示のタイムラグを気にするようなことがないのかもしれませんね >>809 vbaはコールバックを使わないということらしいのですが コールバックを使わずに非同期処理する方法があるのでしょうか? ない(もしくはめちゃ面倒だ)から諦めろ 非同期やりたいなら他の言語使え
え、昨夜のレスでは非同期使えるって言われたので 多言語と同じようにpromise的な処理があるのかと思いました 非同期めちゃくちゃ面倒ってことは エクセル処理で非同期を使うという発想が間違っているのですね なんかいろいろ勘違いしていたみたいでした 神様、先輩方、すみませんでした
vbsとか使って外部プロセスに追い出すのが簡単だな で、何を並列処理したいのかな?
JavaScriptの経験があるなら今更VBAなんかに手を出さなくてもOfficeスクリプト使えばいいでしょ デスクトップでもサポートされたからもうVBAいらないよ
>>815 え、マジ? もう企業や教育者向けのじゃなくても開発出来るの? ブック1開いてマクロ実行 待ってる間にブック2開いて手作業 ブック2保存して閉じたら、そのタイミングでブック1のマクロが停止 これって仕様?
排他処理なにそれおいしいの? ファイル保存したらマクロが止まるのは仕様
VBAいじっている間にいつの間にかボタン表面が白くなって userformの背景色や、userformで使われているボタン表面のも同じ白色に変色 まったく新しくファイルを作っても同じ現象が起きる オフィスをインストールし直しても同じ 例外的にいつもの正常なボタンの表面色で表示されるケースがある この現象が起きる前に作ったファイルのコピーを作る。このコピーを開く。 このとき、セキュリティ警告が出てる間はなぜか正常なボタン表面色 コンテンツ~のボタンを押した瞬間にボタンが白くなる Workbook_Openとかはそもそもない 今のおかしな状態が黒線の左側で、右側がセキュリティ警告が出ている状態 VBEでUserForm自体・ボタン・テキストボックス、これらの背景色BackColorの値は &H8000000F& これって正常な値ですよね? つまり内部的には正常な値なのに表示はいずれも真っ白 windowsやモニタの設定の影響であればセキュリティ警告が出てようが無関係に白色化しているはず 何か原因わかる方いますか? そもそもVBAが関係しているかどうかも分からないのですが。 ちなみに他のエクセルとは無関係のソフトウェアの色は特に変化はないように思います >>819 ですが、文章ちょっとおかしなところがありました ユーザーフォーム上のボタンも、ワークシートに直接おくボタンも同じように白色になっているということです そもそもボタンだけじゃなくて&H8000000F&で色が表示されている部分は どれもおかしくなっているような状態です >>821 真っ白です →は例外的に正常に表示されるケース ←が現状 >>810 非同期と並列処理の区別をつけろよ 非同期=コールバックでもないしな >>823 そうですね コールバックがマルチスレッドって言ってるわけでも プロセスを分けるって言ってるわけでもないです 全ての非同期処理は並列処理でもないですし コールバックは処理なので、非同期でもないですし VBAは初めてなのでいろいろ勉強していきます なんか変なこと言っていたらごめんなさい 自分はやりたい事の手段の一つにExcelVBAがあるだけでExcelVBAでどこまでできるかってのは気にしてない 別の言語を選択すれば可能ならExcelVBAにこだわることもないしね 勉強するあたりのレベルならExcelVBAだけでなくほかの言語も勉強したほうがいいかもね
エクセルの参加人数はすごいと思います 参加人数の多いエクセルをプラットフォームとしてデータ処理できるVBAは 他の言語には見られない参加者人数の価値があります(これを英語で何と言ったか忘れましたが) ハードもプラットフォームも、潜在的な参加者の数で価値を測るという考え方が正しければ エクセルVBAは他の言語をはるかに凌ぐ学習価値があると思うのです 他の言語を学習しつつもVBAも使えるというのは とても素晴らしいことなのだと、VBA初学者としても感じています 先生方、これからもご指導いただける機会がありましたらよろしくです
魔界に転生するとしたら、リザレクの次くらいに持っていたいスキルですもんね。 転生するまでに習得したいと思います。
シート上に実行ボタンがあり、いろいろなBookから値を取得してメインのブックに張り付けるマクロがあるのですが、 Windows7+Excel2010とWindows10+Excel2016では、2016方が数倍動作が遅いです(数秒程度が10秒程度になる)。 ただし、時々2010と同程度で終わることがあり、原因がよくわかりません。 なんか、実行ボタンの押し方によって(クリックしてマウスポインタをすぐExcelのウィンドウ外に移動)、 速度が速くなるような気がしているのですが、そのようなことはあるのでしょうか? あるとすれば、なにか対策や原因はあるのでしょうか?
>>832 2013あたりからExcelの内部構造が大幅に変わったらしい Windowsも新しいほど重くなってる マウスポインタの位置によって速度が変わるのは多いにあり得る 昔はボタンを押したままにするとアプリの動作が止まってたのが、いつのまにかずっと動き続けるようになったし >>829 DBシステムとしては 操作のバリエーション、検索、演算エンジンともに 最高峰の素晴らしい言語システムなのに 初心者に冷たいコミュニティなのですね >>830 ネットワーク経済性と似た発想の価値測定方法で ソフトやハードの経済価値を推定する思考方法です >>834 いやいや、DBシステムとして使うとすると シートにSQL投げようとしたとき インデックス貼れない時点で欠陥品だよ。 EXCELの本分はあくまで表計算。 >>834 まずDBシステムじゃないし COMから学んではどうか 今どき簡易DBアプリはPowerAppsみたいなローコードツールを使えばよい オンライン共有のAccessみたいなアプリがクソ簡単に作れてExcelやスプレッドシートとの連携も容易
自分としては質問があればそれにこたえるだけでいいと思うが 技術者が他の事にも手を広げるならクソ簡単かもしれないが 一般ユーザーが背伸びしてVBAを理解しようとしてるなら保守なんかも含めてハードル高いと思うんだよね まあ言いたい人は好き勝手に言うだけだから止められないが
自分としては質問があれば質問するだけでいいと思うが 一般ユーザーが背伸びして回答なんかハードル高いと思うんだよね まあ言いたい人は好き勝手に言うだけだから止められないが
背伸び?逆やろ 背伸びしようとするタイプはVBAなんて使わない 伸びない香具師がVBAに固執してる
昔 「いいですか?1回しか言いませんからよく聞いてくださいね」 って言われたけど、なんで大事なことなのに1回しか言わないんだろう そんなに大事なら確実に伝わるまで何回でも言うか書いて渡すかすべきだろ
俺、一回しか教えねーぞ! やるから見て覚えろ盗んで覚えろな! これ、昭和の意地悪い上司。 それが当たり前だった時代
>>843 めっちゃ分かる 何がなんでもマクロでやっているヤツって何なんだろうね >>844 みたいな考えの奴はたいていちゃんと聞いてないしメモ渡しても無くしたりするしw >>848 そういう奴でも同じ事何回か教えりゃ覚えるから、 分かんなかったらいくらでもまた聞けって言ってる 目的は教育コストの削減とかそいつの成長とかじゃなく仕事の完了な訳だから >>850 その場限りの相手ならそれが正解だけど>>849 みたいなポンコツは成長しないから今後とも仕事させるならとっとと切り捨てないと結局仕事の完了が遅れるだけ >>852 そもそも昭和の時代にEXCELあったっけ? あの頃ってロータス123とか マルチプランの時代じゃないの? >>853 そういうことを言い出したら極論VBA使いもクビにして優秀なエンジニア雇えという結論にしかならん 雇用維持も企業の責任 >>833 複数のブックを別ウインドウで開くようになったからな 個人的にはユーザーフォームが最前面に来ないのがめんどい あと最小化するとユーザーフォームも消えるのが嫌だな
>>854 最初の日本語版は1989年(平成元年)リリースだから日本語版を使ってた人は居ないはず 最初のExcelはMac用に1985年(昭和60年)にリリースされてるみたいだからもしかしたら触った人がいるかもしれない >>855 別に辞めさせなくてもポンコツはポンコツで務まるような職場に移せば良いだけだろ vbエディターを開いたときに開いているブックのモジュールやらUFやらがバーっと開くのを止めさせたいんですが、どなたかご存じないですか?毎回重ねて並べて閉じるのがめんどい。
ラジオボタンがクリック1回で反応しなくて2回マウスでカチカチって指定しないといけないんだけど、直し方わかる人いますか?(´・ω・`)PCの問題なんかな?
マルチプランならあるな。 と言っても平成のはじめだけど。 あの時代はPC買うとおまけで違法コピーモノがもらえる時代だからな、 マルチプランも123も両方あったわ。 当時は123のほうが強かったんだよね。 Excelとマルチプランて名前が変わっただけじゃないの?
Excel3.0から使っていたら人ならいたよ。 とっくに定年退職されてます。 最近のExcelはごちゃごちゃしていて苦手と言っていたかな。
Collectionについての質問なのですが Collectionの要素をソートする場合 それ用のSubを作って、その中でソート後のCollection変数を作ってその中に順番に要素を1つ1つ入れていって最後に set 元のcollection=新collection とやる方法を考えつきました。 この方法で問題ないですか?それとももっとスマートな方法がありますか?
懐かしいの。 当時 IBM 5550とかいうパソコン使ってた記憶がうっすらある そこでマルチプラン動かしてた ところが海外拠点ではロータス123 の方が評判でどこかでそれに切り替えた記憶がある。同時に IBM 55505何かに変更したような記憶があるな マック使ってたやつが Excel を自慢して確かに羨ましかったな DOS V パソコンで Windows 3.1が動いてその上で Excel が動いた時は感激したな
昭和ならロータス123とアシストカルク使ってたな あれはDOSだったかな?
DOSの頃はファイラーはFD、ネットはエアクラフト、お絵描きはkid98、音楽はMIMPIがデファクトスタンダードだった
昔は企業で使うPCソフトといえば表計算と文書ソフトぐらいだったもんね。
>>864 良いんじゃない?それで。 用途にもよるけどコレクションにキーくっつけといて 別にキー一覧みたいのをソートして作っといて そのキーからソートした順番に引っ張るっていう方法もあるけど。 >>869 あれれそうですか。 キーの方法も良さそうですね。 でもこんなひとはよく使用しそうなのに話が盛り上がらないのは みんなのVBAのスキルが低レベルだからでしょうか? すげーな、普通の人が寝る夜中に盛り上がらないからって他人を低レベル呼ばわり
>>870 かまってもらえないからみんなまとめて低レベル扱いですかそうですか くさっ >>870 なるほど、ただの煽りかも知れないけど あまり人前でそう言うことは言わない方がいい。 人を嫌な気分にさせるし 自惚れ屋と思われて周りからも疎まれることになる。 自分の為にも思ったことは口にしたり書き込んだりする前に一度考えてから実行する方が良いよ。 >>870 当たり前の処理のどこに盛り上がる要素があると思うのか そもそもソートが必要なものにcollection(リスト)使おうって時点で データ構造の選択を間違ってる可能性が大きい For-Next文の中だけで使う局所ローカル変数を定義する場合は そのFor-Nextブロック内で Dim a as String でいいんですっけ? それともモジュールの先頭で? たしかVBAでは局所ローカル変数の概念がなくて Sub/Function内すべての場所で使える気がするのだけど。
>>878 局所ローカルという呼び方をするのかは兎も角 関数やメソッド以下のスコープ変数は基本的には設定出来ない。 変数宣言をする場所についてはVBAに限らず そのスコープが始まる頭のところに書くのが一般的だよね。 ただ、言ってる通り別に先頭に書かなくても問題なく実装は出来る。 >>878 言うとおり局所ローカル変数は存在しないのでFunctionやSubの中ならどこでもいいよ モジュール先頭(Function、Subの外側)だとグローバル変数かパブリック変数になるからその目的ならダメ >>879 >>881 なるほどありがとうございます。 やっぱりできないのですね。 でもSub/Function先頭に書くと可読性が著しく下がる(この意味が分からない人はスキル低すぎ)のでやめときます。 われわれのように複雑なプログラミングをしてる人にとってはVBAの言語はいろいろ不便に感じますね。 >>882 だからそう言った言い方はやめた方がよいかと。 モロに自分が「単一責任原則も知らずにスパゲッティコード組みます」と言ってるようなものだから。 >>882 COBOL書いたら死んでしまいそうな人 >>878 まあ好みだけど俺は変数宣言は可能な限り使う直前って決めてるからそのケースならループ内で宣言する DSのプチコンでローカル変数のありがたさを思い出したな
>>885 何回も変数宣言を実行することになるのかな。そうなら理論的にはメモリの無駄と速度の低下が発生するんじゃないの >>891 普通の文と同じように実行されるわけはないと思ったんで疑問形で書いたんだけど でもどういう法則があるのかよくわからんから質問したの 宣言文と実行文で検索しても参考になる記事はなかった 教えてくれませんか? >>894 おおー、なるほど。 よくわかった、ありがとさん。 >>882 なんでわざわざ煽る言い方するわけ? マシで理解できないわ スレ立ち上げ当初みたいに、こうやって真面目な議論してれば良スレなんだよな。 あんたらハメ外せばすぐ毛の話。。。
初期の頃、Excel板かここかは忘れたけど、質問も即答してくださる凄い回答者が何人かいた覚えがある。 今はいなくなったよね。 質問側も意味不明な質問ばかり。
回答者はすぐマウントとってくるしな >>882 みたいな質問者なのにマウント取ってくる意味わからんやつもいるし 能力低すぎとか、われわれのような複雑な~って頭おかしすぎるだろ >>904 それ、しつこくForがどうのと聞いていた例のあいつだから >われわれのように うん。われわれって誰? 脳内でしょ恐らく ふつーよ、自分から複雑な事やっていますアピールとかするかぁ?? もしかして釣られているのか俺ら
決まった様式のExcelファイルがあって、それを見やすく加工するマクロを組んで自信で使ってた際に、それを部内に展開したいってなった場合どう配布するのが正解なんだろう。 使う人はマクロの知識は全くないものとして。 1.xlamにして配布 アドインの設定をしてあげる必要がある。 使用頻度の低い人にアドインを入れるメリットが薄い。 2.マクロだけ入れたxlsmを配布 加工したいxlsxファイルと同時に開いてもらってマクロを実行してもらう。 手間が増える。 3.VBSに書き換えて配布 書き換えが面倒。 4.VBSとxlsmを配布してVBS実行でxlsm起動とマクロ実行 処理に時間がかかりそう。 使用頻度の高くないマクロをアドインとして登録するのは起動時間のロスになりそうだから避けたいんだけど、他の人に特定のマクロを手軽に実行させるのはどういう方法がいいだろうか?
>>907 > 2.マクロだけ入れたxlsmを配布 > 加工したいxlsxファイルと同時に開いてもらってマクロを実行してもらう。 > 手間が増える。 これでいい。手間って配布の手間のこと? 共有サーバーのどっか特定の場所に読み取り専用にしたxlsmファイル置いといて ここのマクロファイル使って作業してくれって告知だけすればいい 不具合が見つかって修正した場合も同名ファイルで上書きするだけだから楽だと思うよ >>909 リードオンリーで開くにしとけばいいだけじゃね? >>908 Excelファイル2つ開いてマクロ実行して閉じるっていうのが操作的に手間かなと思ったけど、共有フォルダに置いといてそれを開いて使ってもらうのは無難に使いやすそう。ありがとう。 後出しで申し訳ないんだけど、うちの会社のPCがウイルス対策だとかで毎日起動時にマクロ有効化設定を強制オフ(有効化メッセージ出ずにオフになるやつ)にされるせいで、トラストセンターから毎日有効化設定してね、っていう雑な仕組みになってるんだ。 自身は設定オンにするVBSなりbatで対応してるけど、他の人だとExcel開いてトラストセンターで設定変更の事前動作も必要に。 アドインやVBSなら有効化しなくても動作するんだけど、そうなるとドラッグドロップで動作するVBSだと使う側の手間は省けるだろうか。 1. xlsmを共有フォルダに保存 2. 読み取り専用で開く 3. xlsm上の別シートに出力結果をVBAで作成 4. 出力結果シートを新規ブックにVBAで移動 (ws.move) 5. 新規ブックをダイアログボックスで保存させる 毎回これでやってる
>>911 この環境下でも (セキュリティを無効化して対象のxlsmを開く)VBSなりbatファイルの実体を共有に置いて そのショートカットだけを配布がベストだと思う > ドラッグドロップで動作するVBSだと使う側の手間は省けるだろうか 組織内のユーザーのリテラシーにもよるけど、 xlsmでもWorkbook_Openで即ファイルピックアップダイアログ開かせれば大差ないし、 なにより保守がしんどいでしょ もし複雑な加工内容への変更依頼がきたら? あるいは今後別のマクロの作成依頼が来て、それもすべてVBSで配布しろと言われるかもしれない VBEもIDEとしてはアレだけど、 ブレークポイント置けないDebug系メソッドないモジュール分割気軽にできないVBSで開発し続けるの何倍も大変だと思うよ >>912 > 3. xlsm上の別シートに出力結果をVBAで作成 > 4. 出力結果シートを新規ブックにVBAで移動 (ws.move) 新規ブック作ってそこのシートに直接結果を出力した方が楽じゃね? >>907 VBSを配布して、そこに処理対象ファイルをドラッグドロップしてもらうのが、ユーザ側としては1操作で完結して使いやすいと思う ユーザに慣れない操作を押し付けて手間を増やしたら本末転倒だしね ところで「加工」て何するの? 大部分が編集不可の共有ひな型ブックならともかく、人間が好き勝手にいじったブック中から「加工」対象を特定するのは大変だろ 別にVBSにこだわる必要は無い Powershell でも良いでしょ
>>915 加工についても恥ずかしながら前スレで相談させてもらって一応解決することができました。 ・web上からDL出来る名簿がpdf ・pdfをacrobatでexcel変換するとセル位置や結合が不揃い ・目的は名簿データをそれぞれ横一列のデータにしたい vbaにて処理は出来るようになったけど、他の人が使いたいという意見があり、今回配布手段についてご相談させてもらった次第です。 ・WebからDLするドキュメントをCSVにでもしてもらえるよう社内調整する が一番ラクで確か
最近、Alt+F11でVBEを開くと、アドインのコードが表示されるようになったんだけど、 仕様が変わったのか、表示されるような設定にしてしまったのか。。 皆さんは表示されますか?
>>921 毎回アドインのコードが表示されているウィンドウを閉じていますか? それとも、どこかの設定を変更すると表示されなくなりますか? >>917 成程。流れ見てないけど、ここにマトモに助けてくれる人がいるというのは意外(失礼w) acrobatによるpdfのexcel変換過程で色んな気まぐれ要素によりフォーマットが乱れそうな予感がするが、それを吸収するコーディング努力の継続こそスキル上達の早道 頑張って下さい >>922 スマン、何かの設定いじったら直った記憶 覚えてなくてすまん VBAxSeleniumでchromeはオプション設定が出来るけどedgeは出来ないと思ってたんだが、出来るんだな。 ネットでもうまくいかないていう情報が多い。 Chromeの場合 Driver.AddArgument ("user-data-dir=" & fso.BuildPath(CurrentDirectory, "chrome_vba")) Edgeの場合 driver.SetCapability "ms:edgeOptions", "{""args"": [""user-data-dir=" & Replace(fso.BuildPath(CurrentDirectory, "edge_vba"), "\", "\\") & """" & _ "] }" まあjsonで渡してるんだが、VBAてjsonてこんな風にデータベタ打ちしか方法がない?
ダウンロードして使うことがないからどっちてもええよ
インターネット経由がどうたらというのは、古いマイクロソフトと新しいマイクロソフトの内部抗争にすぎない。
ああゆう最先端の企業でも老害が威張り散らしているのかな
大口の客がゴネたんだろう VBAがいつまでも使えるのもそういう方々のお陰なのだからVBAer達は感謝しないと
客先から毎日送られてくるpdfに対し、特定の部分だけを抜いてexcelに出すというものを作りたいです 流れとしてはwordで開いてコピペ→そこから必要な部分だけ整形 という流れで考えており概ねできたのですが、pdfをwordに落とした時に文章がそのまま文章でコピーされる時と1行ずつテキストボックスやら画像やらでコピーされる時がありうまく実用化出来ません 上記か、あるいはその他の方法でも良いので安定的にコピーする方法は無いでしょうか? ちなみにpdfは定型フォーマットに記載された日報のような形式で、手動なら文字はそのままコピペできます、フォーマットはいつも同じですが中の文章は行数が日により異なります
>>937 客先にテキストでもくれと依頼すればいいだろ pdfを書き換えたい訳じゃなくて中身を読みたいだけなら pdfreaderを使うのが一番楽
PDFは人間のため、印刷のために開発された仕組み データの順番がどんだけ変わっても人間の目には同じに見えるようになってるから、中身をプログラムで自動的に取り出すのには向いてない 厳密には不可能じゃないとしても、ものすごく大変 できるだけ別の方法を考えた方がいい
そのPDFが紙からスキャンしたものじゃなく文字データとして残ってるなら、ワード経由しなくてもacrobatreaderで開いてコピペするのが早いとは思う。 PDFをExcelに変換する手段があるなら、変換してマクロで必要な所を抽出できそうだけど元ファイル次第では難しいか?
GOOGLEドライブに入れてドキュメントで開けばOCR使えるからそれを試してみては
pdfってhtmlのようなテキストだったりする、意外と知られていない?
>>943 中身はテキストなんだけど、データの順番が入れ替わっても同じ見た目の文書が再現できる だから人間から見て正しい順序で取り出すのが大変 いっぺん出力してOCRした方が早いぐらい >>943 ここの連中にはよく知られている pdfの解析はめちゃくちゃキツイ >>943 馬鹿なら黙っていればいいのに htmlじゃねーよ >>947 「のような」って書いてる マークアップされてるって事ぐらい分かるでしょ >>948 マークアップじゃないし 馬鹿は黙っていればいいのに バイナリファイルをマークアップされてるって表現する人はじめてみた
とはいっても取引先からのデータは大半がpdfだからなぁ
そんなもん会社によるだろ 言えばExcelやCSVで送ってくれるとこも普通にある
マーキングするために会社の上司が部下の女に触りまくってるじゃん
技術力だけで生きていくか、コミュ力も高めて生きていくかの「差」が今回の質問で明らかになったね 今回の場合、コミュ力あるやつならとっくに客先はpdfとは別にcsvとかテキストファイルを送る方向で動いてるよ 俺はコミュ力を高めていく お前らは今後も無理難題をひたすら解決する技術力を高めていけw
今回のデータをcsvで頂戴したく存じます コミュも何も一行メール送るだけでいいだろう むしろこれ出来ないなら何もできんだろ
社内規定で社外に送信するデータはPDFとなっておりますので、ご期待に沿えず申し訳ありません。
そういうコミュニケーションとれない奴は、 仕様を決めるときにもコミュニケーションとれないから思い込みで作るまである
根本解決を目指すアドバイスはいいけど、どんなデータかも質問者と客先の状況も分からないのに、データ貰えば解決(ドャァは乱暴じゃない? 少なくともwordで開いても文字認識がまばらだったりするって時点で、綺麗な様式から出力したデータじゃないのは確かだし、質問者がそういう回答を求めてないとは思わない?
>>959 OCRか元データもらう以外の解決策があるなら、かなり聴きたい OCRのがマシって回答出てるだろ 現実から目をそらすな
最初に「CSVなどで依頼しても無理でした」とか書いてくれれば無駄な争いは避けたのかもな
A列のセルに列挙された複数単語の商品名から重複した単語のみを除くことは可能でしょうか? A 1 RED BLUE APPLE 2 RED BLUE BANANA 3 RED BLUE GREEN ORANGE 4 RED BLUE YELLOW WHITE GRAPE 5 RED BLUE WHITE CHERRY ↑これらのデータを↓のように整形したいです。 B 1 APPLE 2 BANANA 3 GREEN ORANGE 4 YELLOW GRAPE 5 CHERRY 「RED BLUE APPLE」は同一セル内にスペースで区切られて入力されています。 データ量は1回あたり100行程度になります。セル内の単語、単語の数は毎回異なります。 ご教示いただけますと幸いです。よろしくお願いいたします。
6進数?を通常の時刻表記に直す方法教えてください。 例)1.3→1:30 2.45→2:45
>>965 A1に時間が入っているとして =TIME(INT(A1),A1-INT(A1),0) >>955 コミュ力の定義はなんですか?典型的なインデックスは何ですか? >>968 ご回答いただきまして誠にありがとうございます。 >>964 自分ならだけどこんな感じかと Mainのループは最大行数を取得してくれ _をスペースに置き換えてくれ Sub_Main() ____Dim_i_As_Long ____For_i_=_1_To_5 ________Dim_a_As_String ________a_=_Cells(i,_1).Value ________Dim_j_As_Long ________For_j_=_1_To_5 ____________If_i_<>_j_Then ________________a_=_CutWord(a,_Cells(j,_1).Value) ____________End_If ________Next ________Cells(i,_2).Value_=_a ____Next End_Sub Function_CutWord(a_As_String,_b_As_String)_As_String ____Dim_aa()_As_String ____aa_=_Split(a,_"_") ____Dim_bb()_As_String ____bb_=_Split(b,_"_") ____Dim_c_As_String ____c_=_"" ____Dim_i_As_Long ____For_i_=_LBound(aa)_To_UBound(aa) ________Dim_j_As_Long ________For_j_=_LBound(bb)_To_UBound(bb) ____________If_aa(i)_=_bb(j)_Then ________________Exit_For ____________End_If ________Next ________If_j_>_UBound(bb)_Then ____________If_c_<>_""_Then ________________c_=_c_&_"_" ____________End_If ____________c_=_c_&_aa(i) ________End_If ____Next ____CutWord_=_c End_Function
>>973 どの辺りが? それとも気持ち悪いって言いたかっただけ? なんでスペースがアンダーバーなんだとは思うな 俺も見た目が受け付けなかったわ
Sub Main() Dim a As String Dim i As Long Dim j As Long For i = 1 To 5 a = Cells(i, 1) For j = 1 To 5 If i <> j Then a = CutWord(a, Cells(j, 1)) Next Cells(i, 2) = a Next End Sub Function CutWord(a As String, b As String) As String Dim aa() As String Dim bb() As String Dim c As String Dim i As Long aa = Split(a, " ") bb = Split(b, " ") For i = LBound(aa) To UBound(aa) Dim j As Long For j = LBound(bb) To UBound(bb) If aa(i) = bb(j) Then Exit For Next If j > UBound(bb) Then If c <> "" Then c = c & " " c = c & aa(i) End If Next CutWord = c End Function
早速ご回答いただいた皆様、ありがとうございました! ほぼ思い通りの結果を得ることができました。 ちなみにですが、 例えばA6に「DOG CAT RABBIT COW BEAR」というデータがある場合、 各単語がどれとも重複していないため「DOG CAT RABBIT COW BEAR」そのまま5単語が残ります。 各データのユニークな単語を最小数で残すことは可能でしょうか? 下記のような形です。 A 1 RED BLUE APPLE 2 RED BLUE BANANA 3 RED BLUE GREEN ORANGE 4 RED BLUE YELLOW WHITE GRAPE 5 RED BLUE WHITE CHERRY 6 DOG CAT RABBIT COW BEAR ↓ B 1 APPLE 2 BANANA 3 GREEN ORANGE 4 YELLOW GRAPE 5 CHERRY 6 DOG 度々申し訳ございませんが、よろしくお願いいたします。
Sub Main() Dim a As String Dim i As Long, j As Long Dim last As Long last = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To last a = Cells(i, 1) For j = 1 To last If i <> j Then a = CutWord(a, Cells(j, 1)) Next j Cells(i, 2) = a Next i End Sub Function CutWord(a As String, b As String) As String Dim aa() As String Dim bb() As String Dim c As String Dim i As Long, j As Long aa = Split(a, " ") bb = Split(b, " ") For i = LBound(aa) To UBound(aa) For j = LBound(bb) To UBound(bb) If aa(i) = bb(j) Then Exit For Next j If j > UBound(bb) Then c = c & aa(i) & " " Next i CutWord = Trim(c) End Function
俺のコードをいじってくれてうれしいが Valueとったり改行いじったりしてるだけで行数減らしてるだけなんて結局マイルールのこだわりを主張してるだけなんだよな こんな方法あるぜってのが見たいわ >>978 6が「DOG」になる最小数という意味が不明 先頭の単語を返すだけならCutWordの最後でaとcが同じ値になったらaa(LBound(aa))を返すようにすればいいのでは >>964 複数回現れる単語を削除すればいいのか? Sub X964() Dim Sheet As Worksheet: Set Sheet = ... Dim Dictionary As Object: Set Dictionary = CreateObject("Scripting.Dictionary") Dim LastRow As Long: LastRow = SheetSheet.Cells(Rows.Count, "A").End(xlUp).Row Dim Row As Long For Row = 1 To LastRow Dim Word As Variant For Each Word In Split(Sheet.Cells(Row, "A").Value, " ") If Dictionary.Exists(Word) Then Dictionary(Word) = Dictionary(Word) + 1 Else Dictionary.Add Word, 1 End If Next Next For Row = 1 To LastRow Dim Uniques As String: Uniques = "" For Each Word In Split(Sheet.Cells(Row, "A").Value, " ") If 1 < Dictionary(Word) Then If Uniques = "" Then Uniques = Word Else Uniques = Uniques & " " & Word End If End If Next Sheet.Cells(Row, "B").Value = Uniques Next End Sub >>973 気持ち悪いとは思わないけどちょっと非効率かなとは思う Sub sample3() Dim r As Long Dim z As Long '最終行 Dim s As String '全データ Dim a() As String '単語リスト Dim i As Long z = Cells(Rows.Count, 1).End(xlUp).Row For r = 1 To z Cells(r, 2) = Cells(r, 1) s = s & Cells(r, 1) & " " Next r a = Split(s, " ") For i = LBound(a) To UBound(a) If Len(s) - Len(a(i)) > Len(Replace(s, a(i), "")) Then '2回以上出てくるか For r = 1 To z Cells(r, 2) = Trim(Replace(Cells(r, 2), a(i), "")) '各セルから削除 Next r End If Next i End Sub
効率どうこう言う前に重複した単語がでるような関数はどうかと思うのw
ここでRuby馬鹿がRubyではこうなるとか書くのは見えている
どんなに良コード書いても難癖付けられるのがこのスレ
userformをshowした直後にunloadするとexcelが落ちるのは何とかならんかのぉ hideじゃだめなんじゃunloadじゃないと
UserForm1.Show vbModeless Unload UserForm1 って意味なら、別に落ちなかったけど
とりあえずEXCELが落ちるっていうコードと環境出せ 話はそれからだ
>>978 Ruby で作った require "csv" input_str = <<"EOT" RED,BLUE,APPLE RED,BLUE,BANANA RED,BLUE,GREEN,ORANGE RED,BLUE,YELLOW,WHITE,GRAPE RED,BLUE,WHITE,CHERRY DOG,CAT,RABBIT,COW,BEAR EOT csv = CSV.new( input_str ) input_ary = csv.read # 2次元配列 # 各単語の出現回数を数える。Hash の初期値は、0 hash = input_ary.each_with_object( Hash.new( 0 ) ) { |row, hash| row.each { |word| hash[ word ] += 1 } } # 出現回数が2以上の単語を削除する input_ary.map! { |row| row.delete_if { |word| hash[ word ] >= 2 } row } # 2次元配列を、CSV 文字列に変換する csv_str = input_ary.map( &:to_csv ).join puts csv_str あんたら色んな言語を習得していてエリートなんだな? 5ちゃんねるなんかにいてもったいねーわ
>>995 993と同じ、2行だけ エクセルは2013 >>994 閉じたWebbrowserを再表示する方法がわからないので仕方なく こいつの書くコード、rubyとしてもクソコードなのがほんとひどい
lud20230130004609ca
このスレへの固定リンク: http://5chb.net/r/tech/1651339421/ ヒント: 5chスレのurlに
http ://xxxx.5ch
b .net/xxxx のように
b を入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「Excel VBA 質問スレ Part76 YouTube動画>3本 ->画像>10枚 」 を見た人も見ています:・Excel VBA 質問スレ Part67 ・Excel VBA 質問スレ Part68 ・Excel VBA 質問スレ Part66 ・Excel VBA 質問スレ Part61 ・【RIFT】 Rift: Planes of Telara 質問スレ Part5 ・Counter-Strike: Global Offensive 質問スレ Part3 ・【TESO】The Elder Scrolls Online 質問スレ Part27 ・【TESO】The Elder Scrolls Online 質問スレ Part24 ・【PS/XB】Elden Ring エルデンリング 質問スレ Part3 ・【TESO】The Elder Scrolls Online 質問スレ Part46 ・【TESO質問】The Elder Scrolls Online 質問スレ Part1 ・【TESO】The Elder Scrolls Online 質問スレ Part25 [無断転載禁止] ・【TESO】The Elder Scrolls Online 質問スレ Part6 [無断転載禁止] ・【TESO】The Elder Scrolls Online 質問スレ Part15 [無断転載禁止] ・【PoE】 Path of Exile 質問スレ part22 ・【PoE】 Path of Exile 質問スレ part23 ・【PoE】 Path of Exile 質問スレ part14 ・【PoE】 Path of Exile 質問スレ part33 ・foobar2000 質問スレ Part36 ・【MGO】METAL GEAR ONLINE 質問スレ Part14 ・【PoE】 Path of Exile 質問スレ part15 [無断転載禁止] ・【ソロ専用】アナザーエデン 時空を超える猫 質問スレ 25匹目 【アナデン】 ・【ソロ専用】アナザーエデン 時空を超える猫 質問スレ 36匹目 【アナデン】 ・【ソロ専用】アナザーエデン 時空を超える猫 質問スレ 33匹目 【アナデン】 ・【ソロ専用】アナザーエデン 時空を超える猫 質問スレ 8匹目 【アナデン】 ・【ソロ専用】アナザーエデン 時空を超える猫 質問スレ 39匹目 【アナデン】 ・【ソロ専用】アナザーエデン 時空を超える猫 質問スレ 30匹目 【アナデン】 ・【PC】Terraria 質問スレ Part17 ・【FFBE】 FINAL FANTASY BRAVE EXVIUS 質問スレ6 ・PSVita 質問スレ part1 [無断転載禁止] ・au Xperia Z1 SOL23 質問スレ part3 ・【FFBE】 FINAL FANTASY BRAVE EXVIUS 質問スレ7 [無断転載禁止] ・Florensia -フローレンシア- 質問スレ Part1 ・Tasker 質問スレ 17 ・【臨】 質問スレ 【床】 ・d払い 質問スレ Part1 ・ChMate 質問スレ Part55 ・ポケモンGo 質問スレ Lv.59 ・Warframe 質問スレ RANK32 ・メギド72 質問スレ Part515 ・ポケモンGo 質問スレ Lv.66 ・ポケモンGO 質問スレ Lv35 ・ポケモンGo 質問スレ Lv.40 ・ポケモンGo 質問スレ Lv.64 ・ポケモンGo 質問スレ Lv.65 ・ポケモンGo 質問スレ Lv.44 ・ポケモンGo 質問スレ Lv.68 ・ポケモンGO 質問スレ Lv27 ・Fallout4 PC 質問スレ 25cap ・三国ヒーローズ 質問スレ Part6 ・Tree of savior 質問スレ Part4 ・スター・ウォーズ 質問スレ EP9 ・au by KDDI 質問スレ Part.234 ・スター・ウォーズ 質問スレ EP6 ・au by KDDI 質問スレ Part.240 ・【PC】Warframe 質問スレ RANK41 ・【PC】Warframe 質問スレ RANK57 ・スター・ウォーズ 質問スレ EP5 ・Tree of Savior 質問スレ Part39 ・【PC】Warframe 質問スレ RANK61 ・Fate/Grand Order 質問スレ Lv.22 ・Tree of Savior 質問スレ Part25 ・【PC】Cyberpunk 2077 質問スレ Part1 ・ポケモンGO 質問スレ Lv26 [無断転載禁止] ・【プラン】docomo 質問スレ part6【料金】
06:42:29 up 7:46, 0 users, load average: 8.38, 8.87, 9.05
in 0.088641166687012 sec
@0.088641166687012@0b7 on 011320