Excel VBA 質問スレ Part79(ワッチョイあり)
レス数が1000を超えています。これ以上書き込みはできません。
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
Excel VBA 質問スレ Part77
https://mevius.2ch.net/test/read.cgi/tech/1658009255/
Excel VBA 質問スレ Part78
https://mevius.2ch.net/test/read.cgi/tech/1667104996/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured わかった気で勘違いしている馬鹿の間違いや馬鹿さ加減を指摘するとスレが荒れるので無視しましょう
最近では零細企業のあれです 分かりづらい質問だな。
「エクセルファイルのシートにボタンを置いて、それをクリックしたら
あるアプリを立ち上げたい。これが可能ですか?」
ということかな。答えは可能。 >>6
javascriptに丸投げする形だからそっちの知識も必要になるけどね
IE時代はVB単体で完結できたのに面倒な時代になったな! httpリクエストとか、api接続とか、一般的な表計算の操作が中心の
エクセルユーザーの範囲外なんだけど。
ただ、ExcelでなくてGoogleスプレッドシートはapi接続に相性が良さそう。
クラウドにアプリがあるっていうのは、それだけ優位な気がする。
会社での表計算もほとんど、ExcelでなくてGoogleスプレッドシート使うようになってきて、
今Excelとして残っているのは、過去開発されたマクロで運用する箇所があるから。
こんなことになるとは数年前には思っていなかった。 A列セルに3桁のアルファベットと番号(AAA 1000)、B列セルに金額が入っており
A列セルは番号部分が同セル内に/で区切られ増えるパターンあり(AAA 1000/1001/1002)
これを/がある場合は/で区切り、番号ごとに行を追加して
更にB列の金額も追加した行数で分割するといったことを最終行まで繰り返し処理したいのですが
A列 B列
AAA 1000/1001 1,000
↓↓↓
A列 B列
AAA 1000 500
AAA 1001 500
金額を行数で分割する方法と
番号ごとに行を追加した時にアルファベットAAAを番号前に追加するにはどうすればよいでしょうか。 続き
コードはこれなのですが
どうかよろしくお願いします
Dim i As Long
Dim n As Long
Dim LastRow As Long
Dim SplCell As String
Dim temp As Variant
Dim AddRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = LastRow To 1 Step -1
SplCell = Cells(i, 1)
temp = Split(SplCell, "/")
AddRow = UBound(temp)
If AddRow > 0 Then
Range("A" & i + 1).Resize(AddRow).EntireRow.Insert
End If
For n = 0 To AddRow
Cells(i + n, 1) = temp(n)
Cells(i + n, 2) = Cells(i, 2)
Next n
Next i
End Sub >>12
考えてみた。
Sub test()
Dim i As Long
Dim n As Long
Dim LastRow As Long
Dim SplCell(1) As String ←変更。(0)はアルファベットを格納、(1)はアルファベット以降の金額部を格納。
Dim temp As Variant
Dim AddRow As Long
Dim m As Double ←追加。行数で分割した金額。
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = LastRow To 1 Step -1
SplCell(0) = Left(Cells(i, 1), 4) ←追加
SplCell(1) = Mid(Cells(i, 1), 5) ←変更
temp = Split(SplCell(1), "/")
AddRow = UBound(temp)
If AddRow > 0 Then
Range("A" & i + 1).Resize(AddRow).EntireRow.Insert
End If
m = Cells(i, 2) / (AddRow + 1) 追加
For n = 0 To AddRow
Cells(i + n, 1) = SplCell(0) & temp(n) ←変更
Cells(i + n, 2) = m ←変更
Next n
Next i
End Sub >>13
ありがとうございます!!
希望通りに動きました。
助かりました。すごく嬉しいです。 >>9
It sounds like you are saying that Excel users may not have experience with things like HTTP requests and API connections, but that Google Sheets may be better suited for those types of tasks because it is a cloud-based app. You also mention that your company has been transitioning away from using Excel and towards using Google Sheets for most of their spreadsheet needs, with the exception of some areas where older macros developed in Excel are still in use. It's interesting to see how technology and user preferences can change over time. looks like 〇
sounds like × クラスモジュールを使っていく勉強しています。
ClassAのプロパティとしてClassB,ClassCから作るオブジェクトを持たせる事で階層型に
整理できるようですが、これも正しいオブジェクト指向の形なのでしょうか?
メインコードからObjA.ObjB.プロパティAみたいに呼び出せるのです。
ObjAは例えば初期値というカテゴリ
ObjBは初期値の中の日付に関連するもの
ObjCは初期値の中の料金に関するもの
ObjA.の時点で候補が出てくるのも便利です。なんだかただの変数みたいに使ってる気もしますが。
そしてJavaでいうところのメソッドの継承ですが、親側ObjAのメソッドと同じ名前のメソッドを子側ObjBに作り、
中身は親側ObjAのメソッドを呼び出すだけとすれば継承と同じ動作をするような気がします。
子側クラス内で親側クラスのインスタンスを作成しているので、循環しているような気持ち悪さはありますが、内部はメインコードからは見えませんし。
オーバーライド?というのも親側ObjA側のメソッドを呼ばずに子側のObjBのメソッドに処理を好きなように書けばいいだけと思いました。
そして関数型にありがちな関連性のない関数群Module1とかもClassMultiにプロパティのないクラスとして書いて、
オブジェクト化すると、マルチに活躍する便利屋みたいな存在として、これもオブジェクト指向な気がしてきました。
しかも先ほどの継承みたいに別のクラスから同名メソッドで呼ばせれば、同じメソッドをクラス毎に書く必要もありません。
メイン側から見るとオブジェクト指向そのものにも思えます。
オブジェクト指向を人間や動物に例えると、とてもわかりづらかったのですが、
ネームタグみたいな説明をしているサイトから、単なる整理整頓の為の思考技術みたいに考えて。
見せかけのオブジェクト指向を目指してみると、本物と大差ない気がしてきているのですが間違っていますか?
このままなんちゃってオブジェクト指向で進むことをお勧めできない理由がありましたら教えてください。
CallByNameとかImplementsとか勉強すればもっと本物に近づくような気がしています。 ワッチョイ付きに誘導されますた。
Type RecClass0
field01 As String * 6
End Type
Type RecClass1
field01 As String * 4
field02 As Integer
End Type
Sub test()
data = "abcdyyzzzz・・" ← HEXにすると "414243440006??????・・"
Dim rec0 As RecClass0
Dim rec1 As RecClass1
rec0.field01 = data
rec1 = rec0 ←型が一致しません
Debug.Print Len(rec1.field02)
End Sub
dateの0006にあたる6を取ってきたいんだけど、上記のようなコードを考えてみた。
型が一致しませんになる。
代入て無理なのか?
コボルだとできるよな。
上のコードはインデントのために全角空白を使ってるので、半角にしてくれ。 >>20
> 子側クラス内で親側クラスのインスタンスを作成しているので、循環しているような気持ち悪さはありますが、内部はメインコードからは見えませんし。
堅牢性から考えるとVBAに限らずここがまずいかな
子クラスCで親クラスAを生成すると言う事は、
もし同じような親クラスDを作成して同じ子クラスを
使おうとするとその中で親クラスAを作成することが
前提となってしまい、親クラスDでは使えない場合が出てくる。
子クラスではあくまで子クラスの役割を
与えるべきであって、もし親クラスの機能を
使いたいなら直接子クラスの中で生成するのではなく、
CallByNameやインターフェースを使用するかして
処理を移譲させるようにした方がいいと思うよ。 CSVファイルって、Excelで開いて編集して保存すると文字コードの問題でデータの後ろに半角スペースが入ることがあるのでしょうか? 元々半角スペース入ってなかったのにデータをかきかえたりすると文字コードがShiftJISではない場合、文字化けして半角スペースが入るのでしょうか? >>29
その記事、余白と空白文字(半角スペース)を同一視してるのが気持ち悪いな >>31
そうは言ってもExcelだと余白を空けるのに空白しか使えないから仕方なくね? >>32
正しい余白ならインデントってのがあるが
CSVにしたらどうせ書式はなくなるのに、書式を空白で表そうとするEXCELが気持ち悪いのか
そのくせインデントは無視するという 余白はデータじゃなくて、見た目。
見た目のために、データを変更するのか?
それなら、trim などで、データの先頭末尾の空白類を除去する必要がある >>25
レス感謝です。
呼び出しだけなので「お父さんやって」的なイメージでした。
>もし同じような親クラスDを作成して同じ子クラスを
>使おうとするとその中で親クラスAを作成することが
>前提となってしまい、親クラスDでは使えない場合が出てくる。
ここがわかりませんでした。
ClsFatherとClsSonの二つがあるとします。
メインでClsFatherから父親シルバを作成、
自動的にClsFatherの中で息子キルアが作成されて父親のプロパティにセットされる
親クラスDにあたる父親ジンをClsFatherから作成して、息子ゴンがを作成される
息子ジンが継承もどきで使う機能は父親ドンのだけのつもりでしたが、
継承って本来は父親シルバ、息子ゴンみたいな組合せも自由に出来るものって意味だから
それじゃ違うよってことですか?
息子ゴンのメソッドでどの親メソッドを継承するかをImprementsとかで動的にしなさいということですか? >>38
親が子を生成するのはいいけど、お前の設計では子が親インスタンスを生成するんじゃないのか?
ジンがゴンを生成しても、ゴンの親はゴンがきめるんだぞ >>39
そうです。子も親のインスタンスを生成します。
当然オブジェクトとしては別物ですが、同じクラスからの生成ですので、
同じ親の機能を使えるという意味です。
実際にゴンはジンを作れず、ジンとほぼ同じ能力を持つ別の何かの力を使って
継承に見せかけるという事です。
この見せかけ行為が本当の意味での親オブジェクトの機能継承にあたらず危ないよって意味でしょうか?
で、本当の意味での親オブジェクトの機能を使うならCallByNameやImprementsを使いなよって意味でしょうか? すみません。質問途中に別の質問をする事になってしまいます。
自力で解決出来ませんでした。
VBEのCtrl+hボタンで出てくる置換機能で、パターンマッチングを使用するにチェックを入れました。
Ai.Erase
Ai.Create
AiErase
AiCreate
この4つのワードにおいて、パターンマッチングとして
Ai[AE]としたら下の二つにだけマッチングしました。
そしたら一致したAとEは温存しつつAiとA or Eの間にどっとを入れたいのです。
実際はもう少し複雑なパターンなのですが。簡略化するとこんな感じです。
一致したAとEが消えてしまうので困っているのです。
一致した[AE]のどちらかをそのまま残したいと
Ai.[AE]みたいにしても置換後文字列はAi.[AE]がそのまま出てきてしまいます。
思ってるような使い方は出来ないという事でよろしいでしょうか? Sub test_if()
a = -1
If a >= 2 Then
Debug.Print "aは2以上"
Else
Debug.Print "aは2未満"
End If
End Sub
というマクロなんだけど<>を使わずに同じことが可能?
<>はネット上では禁止されてる場合があるので。 範囲を指定できるのであればCase文でtoを使うとかかな >>42
完全に同じかどうかは知らんが
If Application.WorksheetFunction.Min(a, 2) = 2 Then オートフィルタの或る列が昇順でソートされているかどうか
を判定する方法を教えて下さい。 >>45
昇順か降順かは問わず、ソートされているかどうかでした。 >>45
自分でソートしたものと比較して同じ順番だったらソートされているといえる いや待て、どっかのプロパティにフラグがないかを尋ねてるんだと思うぞ
俺は知らないがな フィルターのボタンに↑↓とか表示されない?抽出とかだとロートの図が出てたり? >>38
そそ、
そういう「どっちの親でも使える」ようにするために
そういう場合は継承は使わずに、移譲でやるのがいいんじゃないかと。
そもそもVBAじゃ厳密な意味の継承は使えないけどね。 一次元配列の中に二次元配列を入れるのってシートから二次元配列として取り込まない限り無理ですか?
例えばa(2)って一次元配列を作って
a(0)=cells(1,1).currentregion
とした場合、a(0)(1,1)と格納されるよね。
一方、b(2)って一次元配列をつくってそこに2次元配列を格納しようとしてredim b(0)(100,100)って宣言してもエラーになるよね? 特に複数のcsvを一次元配列ごとに二次元配列として取り込みたかったんたけど、それができなくて困ってます
0.csv→a(0)に二次元配列として格納
1.csv→a(1)に二次元配列として格納
2.csv→a(2)に二次元配列として格納
よくありそうなパターンですけどネットで調べても出てこなくて…
何かいいアイディアはあるでしょうか? >>52
csvを格納するならそのまま格納して取り出すときにsplitで配列化したらどうか。
デリミタ変えてcsvを繋げてあげれば擬似的に2次元配列に出来んじゃね? >>53
あるいはdirectoryのitemに2次元配列としてaddするか >>54
> >>53
>スマン。directoryじゃなくてdictionaryだw >>48
その通りです。ネット検索しても出て来ないため、ここで聞いてみてどうかなと思いました。
>>49さん仰るように矢印がボタンに表示されるので、何かあるはずと思ったのです。 >>45
ググっただけだけど
Worksheet.AutoFilter.Sort.SortFields
あたりを見ればわかるんじゃね?
てかMSのDocsもこの辺りのドキュメントが貧相で困るわ >>45
AIさんからの天の声です
Sub CheckSortOrder()
Dim sortOrder As Boolean
sortOrder = ActiveSheet.AutoFilter.Sort.SortOn
If sortOrder = True Then
MsgBox "The column is sorted in ascending order."
Else
MsgBox "The column is not sorted in ascending order."
End If
End Sub >>58
だからさ、そのコードが有効かどうかを、先ずはじぶんで検証しろよ ゴミコードだろうと何でも貼りゃあいいってもんじゃねーぞ
△! オブジェクトは、このプロパティまたはメソッドをサポートしていません。だぞ おま環のせいで動作しないだけってか?
検証もしてない野良コードは世間の大迷惑 AIなら間違わないってか? 訊ねる人間側に問題あるからゴミコード吐くのに気付け >>59
そのコードを検証することは重要です。そのコードが有効かどうかは、まず自分で確認する必要があります。「AIなら間違わない」という考え方は誤りです。AIモデルはトレーニングデータから学習するだけであり、常に正確ではありません。野良コードを使用しても問題が起こる可能性があり、それが世間を混乱させることがあります。 >>53
「csvを格納するならそのまま格納して」って言うのが、まさにその方法を知りたいっていう質問でした
Line Inputをつかって一行ずつ一次元配列に分割して、それを二次元配列に格納して、二次元配列の一次元目を増やして…ってのを繰り返すってのを考えました
(二次元配列の一次元目を増やすプロシージャを作成する前提)
ところがredim b(0)(100,100)という宣言自体がエラーになるのでどうしたものかと >>61
お役に立てたのならなによりっす。
でもその内容を聞いた感じだとcollectionかdictionaryを使ったほうがいい気もする。csvがどのくらいの文字数かわからんけど下手するとオーバーフローしそうな気が、、、
あとそもそもファイル操作で読み込むんじゃなくてPowerqueryとかでデータテーブル化してしまえば扱いやすい気も、、、あ、スマンね。いらぬお節介やった。 >>61
そういうのって1次元の配列にCSVから作った2次元配列を足していくジャグ配列だよね
a(b)(c,d)として使いたいってそういう事だよね
CSVから2次元配列に落とす部分は自力で適当に作るしかないと思うよ >>52
2次元配列を格納したバリアント型の1次元配列を使えばまあできるんじゃね >>62
ジャグ配列はまさにその通りです!
色々調べてみたところ、Workbooks.OpenTextで一度新しいブックを開いて、そこをcurrentregionで二次元配列として取得するのが一番早そうでした
シート一度貼り付けて、そこから取得するのがちょっとかっこ悪い気もしますが、コード的には一番楽のだと思うのでそれでいきたいと思います
ありがとうごさいました! >>63
すみません、安価こっちでした
>>62さんも>>64さんもありがとうございました! >>65
解決の糸口が見つかってよかったです。
シートに貼り付けるのは一見かっこ悪く見えるかもしれませんが、エクセルの場合シート自体が目視できる2次元配列みたいなものなのでデータ用のシートを用意しておくのはデバッグの意味でも有効と思います。
最終的に非表示にしておけばデータを変えて不具合が出たときに参照できますしね。 シートに読み込ませてUsedRange.Valueで二次元配列を取得する場合はインデックスが1オリジンになるとこだけ注意 名前の定義で範囲に名前をつけると数式で使用できますが、
VBAで自作関数を作り、その引数として定義した名前を使用するとエラーとなってしまいます。
一応定義した名前の後に&“”を付けて文字列化すればエラーを回避できるのですが、毎回これを入力するのは煩わしく見栄えも悪いのでできることならなんとかしたいのですが
解決策ありましたらご教示の程お願いいたします。 その関数のシグネチャとエラーメッセージぐらいかけよ >>69
実現したいことがどんなことなのかわからないけど名前定義した範囲をRange型の変数にsetしてRange型のまま引数として渡しちゃいかんの? 言葉でうまく説明できないので画像で説明させていただきます。
例えば引数の文字列に別の文字列をくっつけて返すだけのシンプルな関数を作ります。
当然引数にセルを指定すれば問題なく使用できます。
https://i.imgur.com/SnSyEby.png
次に、範囲に名前をつけてそれを引数として使用します。
https://i.imgur.com/6mcu5nn.png
するとこのように「#VALUE!」エラーが出ます。
https://i.imgur.com/9NNr0sB.png
ちなみに範囲の名前に&“”をつければ期待通りの結果になります。
https://i.imgur.com/haXX7gC.png
と、SS撮ってて気づきましたが範囲の中から同じ行のセルを選んで渡す必要があるのですね。
VLOOKUPの第一引数なんかで同じことをすると自動的に同じ行だけを渡せるので勘違いしていました。 >>73
検証してないので的外れかもしれないけどたぶんRangeのデフォルト値の問題かと。
うろ覚えだけどvariant型で渡されているからセル単体を引数で渡すとセル内容の値の型(今回はstring型)を渡すけど
複数セルを渡すとrange型のオブジェクトとして渡されてるんじゃないかな。
なので自身で書かれているようにセルを特定してあげないといけないのだと思う。 >>73
>範囲の名前に&“”をつければ期待通りの結果になります
のがおかしい気がするんだが。実際こっちで検証してもエラーになってる
ちょっと環境書いてみて Sub test()
a = 0.2
b = 0.4
If a + b = 0.6 Then
Debug.Print "A"
Else
Debug.Print "B"
End If
End Sub
これってAじゃね? >>76
Excelでは少数を厳密には表現できないから
0.1と書いても実際の値には0.12...みたいなのが入る
そのズレた値同士の足し算をズレた値と比べるからガタガタで合わなくなる >>76
きちんと型宣言すればちゃんと計算できる
詳しくは下を見た方が早い
https://excel-ubara.com/excelvba4/EXCEL_VBA_427.html#:~:text=Single%EF%BC%88%E5%8D%98%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0%E5%9E%8B%EF%BC%89%E3%81%AF4%E3%83%90%E3%82%A4%E3%83%88,%E7%99%BA%E7%94%9F%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%81%BE%E3%81%99%E3%80%82 >>76
ほんとだよく気付いたね って言ってほしいのか? すみません、マクロスレに誘導されてきました。教えてください
【1 OSの種類 .】 Windows**
【2 Excelのバージョン 】 Excel16.0
【3 VBAが使えるか .】 はい
【4 VBAでの回答の可否】 可
◆やりたいこと
データモデルに値を格納し接続先を作成している
その接続先にあるリストを、検索フォーム、コンボボックスなどのデータソースにしたい
◆補足情報とし調べがついてること
・ピボットテーブルにはビボットテーブル→データモデルからで設定できた
・選択リストもINDIRECT関数で設定できた
・コンボボックスや検索フォームは、RowSourceTypeにテーブルクエリーを設定
・RowSourceプロパティにテーブル名を設定
ここまではわかっていますが、うまく設定ができません
具体的には、下記コードでエラーが出ます
実行時エラー‘13’
型が一致しません
エラーの出たコード
Privets Sub UserForm1 Initialize() {
Me.ComboBox1.RowSourceType = “Table/Query”
Me.ComboBox1.RowSource = “syamei1”
}
上記のコードの書き方、サンプルコードがあれば教えて下さい。よろしくお願いします 連投すみません
コンボボックスじゃなくても構いません
やりたいことは大量のデータをもとに入力用のポップアップウインドウを作りたいです
レコードが合計で100万以上あり、重たくなるのを避けるために、データモデルの概念を知り、それで入力フォームを作ろうとしています
その方法でコンボボックスを見つけましたが、元となるデータソースがデータモデルの接続先から選べるなら、コンボボックスの形式じゃなくても構いません
入力規則で選択リストの値を持ってくることはできましたが、レコード件数が多いので、フォームで出したいと思っています
よろしくお願いします 現場で使えるテクニック満載のVBAの本を教えて下さい。 syamei1ってテーブルを指定してるようだけど
ちゃんとテーブルが存在してるの?
RowSourceでクエリやsql指定してみたら? ネットが見れない環境なんかね?
銀行系ではよくある話だけど 銀行でお金の計算を初心者が本見ながらEXCELのVBAで作ってるとか
そんな銀行やばくね ヤバいよそれは。
思い出したけど、どこかの銀行がATMの不具合出した事故を思い出したわ。
それと同じようなトラブルになるのでは? Excel 365なんだが
ActiveXのコンボボックスをシートに配置すると
ブックを閉じるときにコンボボックスのChangeイベントが発生して
Changeイベントのコードが実行されるんだが、なんで閉じるときに発生するん?
バグじゃねーの? アクティブXコントロールでボタン作ると、ボタン押した時にボタン内の文字が左に寄るのですが、これは治せるのでしょうか? ActiveXオブジェクトは、自分(Application)のオブジェクトに見えても、実は外部のオブジェクトです
Application イベントの扱いで記述不足や漏れが無いか、プロパティの見直しなどしてみるかコードを貼ってみるなり ActiveXってExcelで使わない方が良いみたいな記事(日経PC)で見た記憶ある ActiveXはExcelシートで使うもんじゃないってのは今でも定石! そんな古いVer使い続けるなよ スタンドアロンで一台こっきりならまだしも 検索で例えば「あ」という文字をすべて探し出して
その一文字前を選択したいんですがどうすればいいですか?
Selection.Find
.Text = "あ"
Selection.Words.First.Previous.Select
としてみましたがうまく行きませんでした
カーソルのある前の文字が選択されます >>103
できないんですね…VBA触ったの今日が初めてなもので
最終的には"あ"の一文字前だけをフォント変更したいんですがどういう実装ならできそうか分かりませんか? >>104
自分なら検索して見つかったセル毎に
「あ」が何文字目にあるかを取得し、
その1文字前のフォントを変更するというふうに組む。 >>105
ありがとうございます
けど"あ"が複数あるセルも多いので…複数回走査したらループ終わらなくなりますし
"あ"は目印として入れてあるだけで最後にまとめて消すつもりだったんですが
一回フォント変更の処理したらそこの"あ"を消してもう一度検索がいいんでしょうか… >>106
Mid( Range.value, x)で
セル内のx文字目から後ろを切り出せる
Instr( Mid( Range.value, x), z)で
セル内のx文字目から切り出した中で文字列zが何文字目にくるのか知ることができる
Range.characters(x, y).Fontで
セル内のx文字目からy文字分みたいな一部指定でのフォント変更が出来る
これらのxやyをForで変更しながら処理すればいけると思う >>107
あああなるほどなるほど
仰ってる意味はギリわかるんですけどコードいじるのほぼ10年ぶりとかなんでハードル高い~~~
どうにかがんばってみます……
ありがとうございました >>108
コードを書いてみた。
所定のフォントを変えた後、最後にまとめて「あ」を空白に置換させている。
Sub findあ()
Dim foundcell As Range, firstcell As Range, target As Range, Num As Long, flag As Boolean
Set foundcell = Cells.find(What:="あ")
If foundcell Is Nothing Then Exit Sub
Set firstcell = foundcell:Set target = foundcell
Do
Num = InStr(foundcell, "あ")
If Num > 1 Then
flag = False
Do
If flag = False Then Num = 0
Num = InStr(Num + 1, foundcell, "あ")
If Num = 0 Then Exit Do
foundcell.Characters(Start:=Num - 1, Length:=1).Font.Name = "BIZ UDゴシック":flag = True
Loop
End If
Set target = Union(target, foundcell)
Set foundcell = Cells.FindNext(foundcell)
Loop Until foundcell.Address = firstcell.Address
target.Replace What:="あ", Replacement:=""
End Sub 途中で書き込んでしまったので
もし使うならインデント調整して下さい >>109-110
ご親切にありがとうございます!!
有り難く使わせていただきます 次のようにA列にid番号、B列に削除されるid番号あります。
A,B
1,3
2,5
3,7
4,
5,
6,
7,
8,
9,
C列にAからBの番号を除外したものが残ります。
C,
1
2
4
8
9
これを実現するのに、みなさんならセル関数を使いますか?VBAを使いますか? ありがとうございます。慣れないですがVBAで行うことにしました。 以下の実行が通りません。
If init_id(i) = del_id(j) Then
の個所でインデックスの範囲外というエラーがでました。
配列に対して添字を()しているのが問題でしょうか?
Sub 次の問題()
Dim totalQuestions As Long, pastQuestions As Long, Nextnum As Long, n As Long
Dim init_id() As Variant, del_id() As Variant
totalQuestions = Worksheets("Play").Cells(Rows.Count, 1).End(xlUp).Row - 1
Randomize
Nextnum = Int(totalQuestions * Rnd + 1)
n = Worksheets("arrData").Cells(Rows.Count, "B").End(xlUp).Row + 1
Worksheets("arrData").Cells(n, "B") = Nextnum
init_id = Worksheets("Play").Range(Worksheets("Play").Cells(2, 1), Worksheets("Play").Cells(totalQuestions + 1, 1)).Value
pastQuestions = Worksheets("arrData").Cells(Rows.Count, 2).End(xlUp).Row - 1
del_id = Worksheets("arrData").Range(Worksheets("arrData").Cells(2, 2), Worksheets("arrData").Cells(pastQuestions + 1, 2)).Value
Dim i As Integer, j As Integer
For i = 1 To totalQuestions
For j = 1 To pastQuestions
If init_id(i) = del_id(j) Then
Debug.Print init_id(i).Value
End If
Next j
Next i
End Sub 念のため、chatGTPはあてにならなかったです。 ありがとうございます。Longにしてもダメでした。
根本的に配列の扱いが間違っているような感じですが、
それがよくわかりません。 >>120
init_id = Worksheets("Play").Range(Worksheets("Play").Cells(2, 1), Worksheets("Play").Cells(totalQuestions + 1, 1)).Value
と
del_id = Worksheets("arrData").Range(Worksheets("arrData").Cells(2, 2), Worksheets("arrData").Cells(pastQuestions + 1, 2)).Value
でinit_idとdel_idにセルの値を配列として代入しているけど、これは2次元配列として代入している
だからinit_id(i)という一次元配列は存在しない
init_id(1,1)とかinit_id(2,1)の二次元配列として存在している
よってinit_id(i)は存在しませんってエラーが出てる
ローカルウインドで確認するといい ありがとうございました。よくわかりました。
なんとか1次元の配列を作りたいと思います。
セルデータから簡単に配列つくれるということでこの作り方になったのですが。
列番号を1つにすれば1次になるかと浅はかでした。。 配列よりDictionaryの存在チェックで判定する方が簡単そうだけどなぁ >>112
VBAならこんな感じか。
後、C列に6がないのは記入漏れ?
Sub C列に書く()
Dim i As Long, cnt As Long, dRange As Range
Set dRange = Range("B1:B3")
cnt = 1
For i = 1 To 9
If WorksheetFunction.CountIf(dRange, Cells(i, 1)) = 0 Then
Cells(cnt, 3) = Cells(i, 1)
cnt = cnt + 1
End If
Next i
End Sub >>124
ありがとうございます。やろうとしていたコードよりシンプルです。 >>124でおしえていただいた方法で進めたいのですが。
これで、エラーがでたのはなぜでしょう?
Sub 次の問題()
Dim totalQuestions As Long, pastQuestions As Long, Nextnum As Long, n As Long
Dim init_id() As Variant, del_id() As Variant
totalQuestions = Worksheets("Play").Cells(Rows.Count, 1).End(xlUp).Row - 1
Randomize
Nextnum = Int(totalQuestions * Rnd + 1)
n = Worksheets("arrData").Cells(Rows.Count, "B").End(xlUp).Row + 1
Worksheets("arrData").Cells(n, "B") = Nextnum
pastQuestions = Worksheets("arrData").Cells(Rows.Count, 2).End(xlUp).Row - 1
Dim i As Integer
For i = 1 To totalQuestions
init_id(i) = Worksheets("Play").Cells(i+1, 1)
Next i
For i = 1 To pastQuestions
del_id(i) = Worksheets("Play").Cells(i+1, 1)
Next i
End Sub VBA初心者です
退職済みの前任者が作ったマクロで多発してるエラー対応をしています
Dim 範囲 As Range
Set 範囲 = Worksheets(″Sheet1″).Range(″A1″).CurrentRegion
・変数に日本語を使うメリットとデメリット
・Range型の変数を使うメリットとデメリット
教えてもらえないでしょうか? 聞いたこともない英単語だとかえってわからなくなるからいっそ日本語の方がいい時がある(語学力の問題) >>130
前任者がつくったとかいうのは関係なく、エラーを直して正常に動くようにするのは今の担当者の仕事じゃね
日本語を問題にするなら好きな言葉に置き換えればいいだろう 日本語のメリット
人によっては視覚的に分かりやすい
デメリット
その度に切り替えボタンを押すのが面倒
後任者が分かりやすいように日本語にしといてくれたんだろう 値1 と 値1 が混ざって変数宣言を省略してるとか
漢字の間違いや全角の空白が紛れてたこともあったな昔のことだが ついこの間、ExcelのupdateでまたVBAが壊れたので
変数はもちろん、ワークシートから引っ張ってくるシート名や定義名も
日本語は止めた。 Excelって非アクティブからクリックでアクティブにするとき、クリックしたセルが一発でアクティブにならんのな
前回操作時のセルがアクティブなる
デュアルモニターでマウス行ったり来たりしてExcel入力してるから面倒くさいったりゃありゃしない
スプレッドシートは問題ないんだけどさ
スレチだったらすまん 非アクティブのウィンドウにマウスをもっていったら自動的にアクティブになる
無料のユーティリティソフトを入れたらいいんじゃね >>139
Windowsにその機能あるんだが、普段の使用で使いにくいんだよな
意図しないウィンドウがアクティブになってりして
とりあえずスプレッドシートのほう使うよにしたわ 流石にエクセルのセルをクリックで操作は意味不明だろ
そこに文句言うヤツとか誰も想定してないと思うわ いや、デュアルモニターの隣りの画面でFXのチャートの値幅をマウス操作で計測し、その値を隣の画面のExcelに打ち込んでデータ分析してるんだが……
一回入力するたびに隣の画面にポインタ移動するから、そのたびExcelが非アクティブになるんだよ
なんか俺めんどくさいことしてるのかな……?
まあ、これ以上はスレチになるからここで終わりにしておく
すまんかった これじゃダメかい?
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.Selection.Active
End Sub >>144
うまくできんかった。
chatGPTでもマクロを教えてもらったが、そっちも機能せず
もしかしたらオマカンかもしれん
だからスプレッドシート使うことにした
わざわざすまんかった
ありがとう ん?よくわからんけど、vba起動したら別のソフトがアクティブになるってこと?
別のソフトをアクティブにする前にに次に使いたいセルをSelectかActivateにしとけばいいんでない?
そもそもセルに手打ちってのもよくわからんけど >>138
エクセルのアクティブ化とアクティブセルの変更を1クリックでやりたいって話だろ
デュアルモニターとか関係ない
Activate系のイベントでマウスカーソルの位置拾ってセル位置判定してアクティブ化するマクロを書けばできる気はする
マウスカーソルの位置ひらうのがVBAだけで出来なかった気がするから面倒だな そもそもFX側のプログラムから
記録用CSVなりに追記する形で出力にすればいいのでは
目的と手段を混同しているように見える FX側はきっと既成のソフトウェアで手を入れられられず出力機能もないのだろう。
でなければマウスで幅を計測なんて、Excel抜きでも面倒な事をしてないと思う。
FX側ソフトウェアに要望を出す、別のものに変更する、または特注するのは有りだと思う。 B行に日付 C行以降は各項目
2023/4/3 パン 150
2023/4/16 米 500
2023/5/20 サラダ 230
︙
2023/8/13 牛乳 150
などと表があるとこから、VBAでinputboxで何月を取り出したいですか?など質問をして、その月だけを別シートに抽出したいのですが…findを使う?
どうすればいいのか教えて頂きたいです。 >>149
そいつがやるべきはVBAじゃなくFXソフトのお勉強からだな
少なくともメタトレーダー系ならExcelに対するVBAのようなプログラム制作用機能が充実してるから値幅計測ぐらいわけない >>150
どうればいいのかって…
VBAでinputboxで何月を取り出したいですか?など質問をして、その月だけを別シートに抽出してくださいってしか言えんだろ
具体的にコード出さないと何も言えない
VBAでやるよりピボットテーブルの方が・・・ AutoFilterやCurrentRegion.copyで何とかなりました。
すみませんでした。 もしかして:For
まあ他人と共用するマクロなんだろうし
その他人の中にマクロのことを聞けるやつもいないんだろうから
手作業をマクロで書いただけみたいなので正解かもしれんな 他人と共用するマクロは、共用している他人がマクロを編集できるので
自分がどう作っても他人が勝手に修正するだろうし・・・ >>156
事前に許可なく編集禁止と伝えておくのはどうでしょうか??
自分の職場はトラブル防止のため注意喚起を徹底してます。 マクロを作った人間の責任とサーバー上のファイルを管理している管理者
業務としてマクロを使う作業を指示している上司に変更内容を確認してもらう必要があるよね >>132,134-137
遅くなったけど130です
ありがとう
自分には日本語の変数のほうがわかりづらいし、>>137の言うように万が一にも備えて英語に置き換えることにした Public Sub aiueo()
Dim Ary(2) As Variant
Ary(0) = 10
Ary(1) = "文字列"
Ary(2) = CDate("2021/2/2")
Dim test As Variant
test = Ary
Call aiueo2(test)
Call aiueo3(Ary())
End Sub
Public Sub aiueo2(ByRef Ary As Variant)
MsgBox TypeName(Ary)
End Sub
Public Sub aiueo3(ByRef Ary() As Variant)
MsgBox TypeName(Ary())
End Sub
関数への配列をどう渡すかで悩んでいます。
配列として渡すのか、Variant型のスカラー変数にして渡すのか。
VBAのVariant変数は配列さえも入るスカラー変数だと認識しています。
なので、配列そのものを入れてるだけで、Variant型の配列変数とは少し違うと思っていました。
しかし上記の結果は同じでした。そうなってくると
どっちでもいいということなのでしょうか?
もう一つ気付いたのはaiueo3はByVal渡しが出来ないけど、aiueo2ではByVal渡しが出来るので、
大元の配列の中身をいじらないで済むという違いがわかりました。
他に違いはありますか? >>160
Variantの配列は結局Variantだから下のように配列指定の括弧を取って関数宣言すれば値渡しもできるよ
Public Sub aiueo3(ByVal Ary As Variant)
関数引数の宣言で配列を受けるように書いてしまうと参照渡ししかできなくなるってだけ >>160
そんなサンプルばっかり作ってないでちゃんと役に立つもの作ればいいのに >>161
ありがとうごございました。
スカラーで受けるか配列で受けるかにこだわっていました。
あれからもう一つ気付けたのは
Public Sub Sample(Byref Ary() as Class1)
Public Sub Sample(Byref Ary as Class1)
この時に大きな違いが出ました。前者はAry(i).と書くだけでClass1のプロパティメソッド一覧がサジェストしてくれますが、
後者だとVBE的には配列と認識してないのでサジェストしてくれません。
これを決定打として前者の書き方に統一しようと思います。
>>162
8割出来てたソフトをクラスを導入して書き直したら拡張しやすいコードに生まれ変わると信じてトライ中です。
月に数日しか触る時間が取れなくてちっとも進んでないです。
久しぶりに触ると自分が書いたコードさえ複雑すぎて読めないです。 長くなれば長くなるほど自分のコードってイミフに見えるよね。特に3ヶ月経てば。 なにをしてるかしらんけど、クラスを配列にして関数に渡してる段階で
ちょっと設計見直したほうが良いと思うぞ なぜそういったコードが産まれるか?
前任者がそういったやり方をしていたから。 >>165
そうなのですか?
クラスを配列にしているというよりは、配列の中にクラスのインスタンスが入ってるという事なのですが。
例えばA組には生徒が100人います
生徒の遺伝子情報を持つ精子がそれぞれ1億匹います
しかもそれが毎日吐き出されます。
もちろん日別にそのインスタンスは微妙に違います。
まさにそれが配列の中にクラスのインスタンスがある状態かと思ってました。
とても理にかなった行為に思えます。
配列の中にクラスのインスタンスを入れる事は。
クラスはあくまでも階層図なのではないでしょうか。
配列を横の広がりとするなら、クラスは入れ子をする事で深さを表すと思い込んでいます。
5次元配列とかイメージも出来なくてわからないのですが、クラスの入れ子で5層を作るのは案外わかりやすいです。 クラスの配列なら横への広がりのイメージだな
クラスの深さなら継承の概念が必要
本格的なオブジェクト指向言語なら普通に使われるけどなんちゃってオブジェクト指向のVBAでは記述できない クラス使うと一挙に視野が広がるよ
ついでを言うと配列の代わりに
コレクションやディクショナリを
使うことも視野に入れるといいと思うよ プロパティ、メソッドなどの概念はオブジェクト指向からの由来
ただし本格的なクラスベースでもプロトタイプベースでもない独自体系の(中途半端な)オブジェクト指向 敢えて言うならフォーム指向というよりコンポーネント指向
excel(Application)、book、worksheetなどすべてのオブジェクトはCOMコンポーネント
フォームもCOMコンポーネントの中のひとつ >>170
C言語だってできるわ
データ(構造体)とそれを操作する関数を作っていくだけだ >>167
たとえばエクセルブックは複数のワークシートをもってるが、それを配列で管理したりしてないだろ
まあ、VBAはコレクション系が弱いので配列で実装することもままあるがな
>>174
ここで言うオブジェクト指向できるかどうかってのは、
言語側にそのサポート機能がどのくらいあるかって話なんだと思わないかね?
太古のBASICはもとより、VisualBasicも出始めはオブジェクト指向を意識したものではなかったからな
互換性を残しつつオブジェクト指向を取り入れたのでかなり中途半端な出来なのはまあしょうがない VBAは糞だから廃止しても良いけど
代替がC#じゃなくてPythonになりかけたのは笑う そういえば結局MSはVBAを完全に廃止はしないんだっけ?? VBAのクラスは中途半端と言えばまぁそうだけど
VB.Net、おいてはC#とかをやる際の
練習には・・・いや、ちょっと厳しいか
でもObject指向言語いきなり入ると
継承ばっかに目が行って
移譲が疎かになったりするから
まぁいいんじゃないかな ちなみにお前らは おじさんやおっさん って呼ばれてもおかしくない年齢だよな? ExcelとVBAを使って商品の在庫管理をしようと考えています。
1つの商品の販売数は概ね1〜10程度に収まっていますが、たまにそれを超える数が出る事があります。
入力を簡単にするため10個以下のときはドロップダウンリストから選択し、それ以上の時は直接入力で
対応しようと思ったのですが、コンボボックスでは直接入力した値を取得できません。
直接入力とドロップダウンの両方で値を取得出来る方法はありませんか? フォームコントロールのコンボボックスだとプロパティに無いから出来ない
もし、セルの[データの入力規則]でもいいなら、エラーメッセージタブの □ 無効なデータが入力・・・
のチェックを外せば、リスト外の文字列(数値含む)も入れられる 正直1桁ならコンボボックスより直接入力のほうが効率いいと思うが 日付も商品もマウスで選択するようなUIなら理解できる
マウスから手を放したくない みたいな >>187
自分なら基本テキストボックスで直接入力
ただマウスで操作したい要望に対してはボックス横にスピンボタンを追加することで対処する
初期値を1、増減分も1にしておけば1桁程度の値ならコンボボックスと大して変わらないと思う 今時PCが殆ど使えない、新しい事覚えようとしないオバさんに使わせるのでなるべくキーボード入力をしないよう、パッと見で簡単に見えるように作りたいのです。
本来ならこのオバさんクビにして新しい子雇うのが早いと思うのですが…
ありがとうございました。もう一度UI考え直してみます。 質問者も頭が悪い
わからない人になぜ標準と異なるインターフェースを使わせようとするのか
こういう人が現場に混乱をもたらす わざわざ個数をドロップダウンリストから選ぶとか面倒くさすぎるだろ
規則入力で制限して直接入力させろよ いや、昨今のWebアプリ(というかWeb入力)画面は、そういうの多く成ってるぞ
和暦、年、月、日、数量なんかもそのたんびドロップダウンしてスクロールしてクリック
一月一日生まれならスクロール不要だけど、十二月三十一日生まれだと毎回面倒臭い とか
おぢさんおばさんのUIと「新しい人」向けのUIも変わって来るんだろう、たぶん
社会に出た時にそういうUIが当たり前 なんてぇ連中にとっては「何で?」の疑問符も湧かないんだろ
タッチパネルUIがメインに成ってくと、やむを得ないとかなのか知らんけど(工夫が足りないだけ?) 左にラジオボタン用意して
●10以下 [ ドロップダウンで数を選択 ]
○直接入力 [ テキストボックス直接入力 ]
みたいにしたらどうかな。
直接入力したければできるようにどれが最適かわからなければ手段を複数開放しとけば許されるかも そういう小手先のお節介機能が、後々鬱陶しくなって属人化と揶揄されて忌避されてく元
シンプルイズベストに徹してみるのも、使い続けるためには必要 なのかも UIだけじゃなくて入力デバイスのことも考える必要があるって話だな
ところで入力させるのはどこなんだよ?
シートなら>>188で解決だから、シートに入力させればいいんじゃねえか >>187-188
ちょっと気になって試したが
Private Sub UserForm_Initialize()
Dim i
For i = 0 To 10
ComboBox1.AddItem (i)
Next
End Sub
Private Sub CommandButton1_Click()
MsgBox ComboBox1.Value
End Sub
普通にできるじゃねえかよ あらまw
なんだったんだここ2~3日のやりとりはw ttps://my.au.com/cmn/WCV009001/WCE009001.hc
のようなサイトにおいて、ボタンのid属性などが不明の場合、
どのようにすれば
objIE.document.getElementById(“nav-search-submit-text”).Click
のようにクリック処理が記述できるのでしょうか? 他のgetElementなんちゃらを使えばいいんでねーの? >>207
まずhtmlソース全部見る
タグとかクラス名とかinnerHTMLとか、そこを一意に識別する方法を考える VBAをやらざるを得なくなってしまい、半月ほど初心者向けサイトをざっと見したんだけど、復習しながら練習するのにいいサイトとかないですかね??YouTubeとかでもいいです。 教えてもらうくせに上から目線でサイト探しているの? え?どこが上から目線?
全然普通の態度だと思うが。 VBA やりたい事でググれば大抵出てくるOffice田中のサイトでいいんじゃないの 俺も別段上から目線だとは思わんな
vba100本ノックでググればいいよ ここ最近は神髄というサイトが人気あるらしいね。
例の老舗さんはネタ切れ感あるとか?? いいサイトが見つからないから勉強ができないって言い訳はするなよ いうほどいいサイトってなくね?
コード書く練習したいなら100本ノックくらいしか思いつかんわ。
サラッと目通しただけじゃ難易度高いだろうが ChatGPTに聞きまくり+ネットのコピペまくりでごまかしてるわ
コメントつけて何とか弄れるようにはしてあるけど
無駄だったり重複する処理を消したりはしない、というか下手に出来ない >>224
こんなのが作ったVBAを使わされる方がかわいそう 不具合が起きてもコピペだから原因がわからず自分が作ってないから直せませんとか言うのが見えてる 今注目してるのはOffice 春だな。
なかなか痒いところに手が届く技を紹介してくれている。 恐ろしいぐらいめんどくさかったけど複雑な処理をするマクロが完成して改善の部門賞で去年3万貰えたけどそれを超えるマクロが完成しそう
こりゃ社長賞狙えるかな だよな、ここの人らって本当に井の中の蛙だわ
異動してpythonに移行する前に作り上げて10万かっさらうわ まぁEXCEL VBAはEXCEL扱うのはめっぽう強いし
ちょこっとした処理を作るのに長けているから
プログラマ主体でなくて業務側についてる人でも多く使っているからね。
他の言語使っててもUTとかの際に
エビデンス取るとき整合確認とかで
EXCELの数式やVBA知ってると
かなり時間短縮出来たりするし。 ちょっとした処理に適しているのがExcelマクロだい。 Excelの罫線が太すぎるので
ある範囲の入力済セルの下に
例えば0.5ptのオートシェイプを引きたいです
どのようにしたらできますか? 入力済セルの下にオートシェイプの線を貼り付ける
線の書式の幅を 0.5pt にする ほんとにオートシェイプでやるの?
あら手の嫌がらせかな >>242
どうしても細い線が引きたいけどないのでそうするしかないんです >>243
ダイアログの「なし」の下の破線が一番細い実線だよ
0.5ptって訳じゃないけどこれで代用はできない?
https://i.imgur.com/FI2RhpR.png やりたければやればいい
何がわからないのかわからない
丸投げしたいなら初めからそう言っとけ 流石に何も調べず「こうしたいんです」って言われてもね
調べた上で質問しろよ流石に >>244
プリンタの問題なのかその破線だと印刷されません
ブラザーのモノクロレーザーなんですが
色々と調べたところインクジェットだと滲むから印字されるけどレーザーだと細すぎて印刷できないみたいです >>247
レーザーでも印刷はできる
プリント解像度が合ってないから変えて試せ
要件としてはプリンターで細い罫線を出力したいが正しいのに、
情報小出しにするのはなぜ? 馬鹿は馬鹿な頭で馬鹿な方法を考えついて馬鹿な質問をする法則
例の零細企業の馬鹿でわかったはずだろ? >>248
考えた結果、オートシェイプで線を引くしかない、となったのでそれのやり方を聞きました
ブラザーのサポートにも問い合わせたけどそういうものみたいです ちなみに点線は印刷業界でいうヘアラインというやつでプリンタの一番細い線を出すという命令なので
いいプリンタほどほぼ印字されないそうです
なので設定は無関係です
300dpiにすれば印字されますが文字が汚いです
印刷のアドバイスを聞きたいわけでも情報を後出ししているわけでもなく、
オートシェイプで線を引くコードが知りたかっただけです 絶対に自分で調べたほうが早いし楽だし拡張性あるのに、頑なに人に聞くやつっているよな
ggrks Sub Macro1()
Dim rr As Range
Set rr = Selection
rr.Parent.Shapes.AddLine(rr.Left, rr.Top + rr.Height, rr.Left + rr.Width, rr.Top + rr.Height).Select
With Selection.ShapeRange.Line
.Weight = 1
.ForeColor.RGB = RGB(0, 0, 0) '255,255,153 薄いイエロー 204,255,255 薄いブルー
End With
rr.Select
End Sub
Sub Macro2()
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlHairline 'xlThin
.ColorIndex = xlAutomatic
End With
End Sub
Macro1が直線を引く場合 Macro2が罫線を引く場合 Weight = 1を0.5にしても変わらない xlHairline細線xlThin極細
直線を引くと消す作業が必要に成る 下線を付ける場合って普通はアンダーライン機能使うし、空欄の下線なら___ (シフト+「ろ」)
~~~~~~~~~~ (半角波線) ^^^^^^ (ハット) で上行の強調みたいな書き方したり
───── (罫線文字) ━━━━━ (罫線文字太い) でたいていは済むと思うが 下線というのはセル毎の仕切り線という意味でした
わかりにくくてすみません >>249
馬鹿は馬鹿な質間の後に後出し条件を付けるも追加で >>256
別に全然後出しとは思ってないけどね
細い線が出したいです、ではなくて
自動でオートシェイプで線を書く方法を教えてください、なんだから 何が問題なのかわからない馬鹿ばっかのところが見つかるといいね >>257
それは自分が思う解決方法であって目的は細い線を印刷することだろ >>258
オイオイw 提示したコード試したンか?w オートシェイプの線と罫線と両方をサンプルして
尚且つ、線種や色を改良しやすいように例示もしたってのに
出力できる太さに限界があるなら色を変えることで改善させるのもひとつの解決策だろうに >>264
そういうまともな発想が通じない自分の馬鹿な解決方法とやらに拘るのが馬鹿の馬鹿たる所以だ、残念なことに どこが日本特有だよ
タイやら中国やらアメリカやらからデータ来るけど罫線なんて普通に使いまくりだぞ
文化じゃねーよ無職知ったかかよ うおおw またどっかに吸い込まれたw なにがイカン?
tps://www.post.japanpost.jp/img/int/use/writing/pic_invoice.jpg 日本郵便のサンプル
tps://learn.microsoft.com/ja-jp/dynamics365/finance/localizations/media/apac-tha-tax-invoices-tax-invoice.png
tps://templates.invoicehome.com/invoice-template-en-neat-750px.png
各国のインボイス画像何枚か貼り付けたレスだが、取り敢えずアタマ削って書き込んでみるw
現地の駐在員が日本人の可能性もあるぞ と書きたかったw それらの国でもイージーな書式でも通用するから
敢えて日本向けに罫線書式で送り付けてきてる可能性だってある 何かに憑り付かれたように「これでなきゃだめ」
なのは、使う側が融通効かない石頭揃いなせいが大 容易に使えてそれを容認するような文化 が無い(劣ってる)とは言える 部署で唯一VBA使える人が異動しそうなので
なにか力になりたいけれども、マイクロソフトのVBAスタンダードの
勉強をするよりはその人のコードを見て調べて…の方が良いでしょうか。
資格は実務に役立たないとよく聞くので。 >>269
VBAスタンダードなんかのVBAエキスパート資格とMicrosoftは無関係
だからVBAスタンダードより異動する前にコード見て、聞けるところを聞いておく方が有意義 何も知らないやつが仕事で力になりたいけどとか簡単に言っちゃいけないよ
他人のVBAコードは不条理の塊と見なせるから、担当が自分に振られたのでなければ下手に関わらない方がいい
異動なら連絡は付くだろうし、君が心配しなくとも引継ぎ担当が面倒見てくれるよ >>270 >>271
ありがとうございます。よく分かりました。
ちなみに引き継ぎを受ける候補は私なので
自分でもコツコツ勉強プラス異動後も聞くことにします。 こっそりYouTubeで解説動画見て、簡単なの自分で作って、実務のVBA眺めて意味を考えてググって分からなかったらここで聞いて勉強してからじゃない?
最初は使い方だけ聞けばいいし、中身変更なんて頻繁にないでしょ。 >>280
Listobject使うと自動で交互色テーブルになるんですが他国言語版はならんのか? >>269
VBAの試験なんて
適当にVBA組んでれば
その内何も勉強しなくても
エキスパートいきなり受けても受かる試験だから
そん時受ければいいよ。
EXCELの試験の方が難しいらしい 日商表計算1級は自慢してもいいレベルらしい。
mosは…察し。 エクセルのチェックボックスにチェック入れたら、特定のセルに文字を入力する方法を教えてください
↓みたいにチェック入れたり外したりしたら、セルB2に入る文字を変えたいです
https://jsfiddle.net/07ed2ajc/ A列の「作業結果」ごとに振り分けたいんだけど良い方法ない?
ピポッド組んだ方がはやいかな?
A列 B列
作業結果 氏名
不備なし 田中
不備あり 佐藤
不備なし 佐々木
不備あり 加藤
↓別シートに転記したい
A列
不備なし
田中
佐々木
不備あり
佐藤
加藤 フィルタかけて 「不備なし」、「不備あり」ごとに転記
作業結果 氏名
不備なし 田中
不備なし 佐々木
不備あり 佐藤
不備あり 加藤
「作業結果」列で重複データのみを削除
Sheets("Sheet2").Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
作業結果 氏名
不備なし 田中
佐々木
不備あり 佐藤
加藤
ここまではイメージしたのだけれど、
そもそもとして、A列の属性ごとにまとめたいから、上記ではうまくいかないような… 自己解決
ピボット組んだ方が説明しやすいような気がした 今月に入って勉強し始めたわいはフォームからの操作で使ってるけど、
ある結果に該当するデータを For ~ Next と If ~ Elseでふりわけてコピーしてる。 >>281
Excel2019以後や365版ならVBAでなくワークシート関数のFilter関数使った方が楽かと。
こんな感じ。
=FILTER(B:B,A:A=“不備なし”) >>287
これいけそうだね。
毎日集計ださなければならないんだけど、
日付で絞るのは楽勝だとして、
不備なし
不備あり
ごとにFILTERかければいいんだね。
なるべく誰でも分かるものにしろ、
とのお達しなので来週ためしてみるよ。
どうもありがとう。 Excelのシートにpdfを貼り付けたいんですが(一枚目だけでいい)
OLEObjecps.Add
でファイルパスを与えて取り込むと
文字が読みづらいレベルで
解像度が低く取り込まれてしまいます
簡単なプレビューをエクセル上でしたいだけで
pdfのパスが入ってるセルを選択したら
シート上に表示、といったことがやってます
別のファイルを選択したら前のプレビューは消して次のファイルをプレビューする、みたいな
Acrobat Readerはインストされてますが
無料環境でやりたいです。 >>289
Windowsも有料だし、電気代も掛かるし無料は無理でしょ
他は現状報告だけで答える部分はありませんね
質問やり直せ pdfを画像として印刷して
その画像を取り込めばいいと思う >>291
ありがとうございます
設定試してみましたが、症状はかわりませんでした…
>>292
一応考えはしましたが、面倒で躊躇していました…
pdfを取り込むという方針でばかり検索していたので見つかりませんでしたが
webbrowserに表示するという手に逃げることにしました
フォームのModalをオフにしてサイズを可変にすれば
シート上のオブジェクトと似たような操作性にはなるので
これで行こうと思います そこはほら、ファイルパスを指定して読み込む という部分で察するに
表示されたPDFに関連した他の情報もSheet上にいろいろあれこれ連動して表示されるとか
そういうつくりに成ってるのかも知れない デュアルモニタでも無いんで目が散るとかも
pngやjpgとかの画像ならオブジェクト扱いで拡大縮小すれば何とか処置できるかも知らんけど
PDF固有の問題とかなんだろ >>294
すいません
pdfだけじゃなくて
普通の画像もユーザーに同じUIで操作させたいのと
普通のReaderはファイルを連続で開くと
タブで複数開こうとするので諦めました…
新しいファイルを開いたら
新しいインスタンス作らず開き直してくれれば近い動作になるんですが
あと、AlwaysTopにする必要もありますし
余計に大変だと考えていませんでした
>>295さんの内容でだいたい正解です 1 PDFをAdobeReaderで開く
2 AdobeReaderにCtrl+Lを送ってフルスクリーンにする
3 画面キャプチャする
4 クリップボードの画像をシートに貼り付ける
5 AdobeReaderを閉じる
何が面倒なんだこれ 1回だけならいいかもしれんが、毎日何回もやるとなったら
面倒だと思わんほうがどうかしてる まぁwebbrowserで済むなら
そっちのほうが良いだろね
readerのインスタンス閉じたり開いたりしなくていいし
いちいち画像スクショのフローも通す必要ないし
処理もパスを渡すだけで済むし
なんだったら複数ページでもスクロール確認できるし 数値が指数表示されるのどうやって直しますか
format で@にすれば直るって言う人いるけど末尾にE15とか付いちゃう >>301
随分前に取り込んだcsv内のデータが指数表示になって困ったことがある。
セルの書式設定が標準だと12桁以上の数値は自動的に指数表示になるexcelの仕様らしいので書式設定を数値にするか、頭にアポストロフィをつけて文字列として入れたかのどちらかで対応した記憶。 csvの取り込みはVBAから直接ではなく、
PowerQueryにした。
エンコードや読込み列数の指定もできる。 分からないから質問しているのに馬鹿だの何だのって。 >>306
馬鹿でNGしておくといい
質問スレによくいる罵るだけ罵って自身は何もしない無能な奴だよ >>307
よく読んでいないのに決めつける馬鹿
お前らにはわからない時には時々答えているぞ おいおい、NGワードての初めて使ったがあぼーんだらけだぞ??
いかにここがNGワードだらけか分かったよ。 会社のシステム(黒バックに緑の字)で“数字→Ent”で画面表示を切り替えて行くんだけど、どうしてもSendkeyでEnt(テンキー側)が押せない。(それ以外は押せている)
NumLockの問題では無いと思うんだけど、何が問題なんだろう?
“{ENTER}”でも“~”でもダメでした。
どうもメインキー側のEntを押している感じがする。(Entはそれぞれ別の機能か割り振られている)
Sendkeyで無理なら他の方法ってない?
ちなみにVBAは独学でやっている初心者なので、お手柔らかに。 大きいEnterとテンキーのEnterはキーコードが違う
テンキー側は{ENTER}
sendkeysで{PRTSC}やっても画面キャプチャ撮れないのと同じようなものかも
AutoHotKeyみたいなツール使った方が簡単かもよ >>316
いや、返信が早いのはありがたいんだけど、エンターキーが別なのは分かってるから、テンキー側か押せないと書いてるワケなんだけど…。
会社のパソコンだから、勝手に別アプリは入れられない。 >>317
.exe叩くことすら不可能なら諦めろ
AutoHotKeyはAS/400のターミナル操作で右ctrl無いノートPCで右altで右ctrl操作したり、
テンキーがないノートPCでてんきーのEnter押下操作したりした実績がある >>317
どうしてもVBAでやりたいならWin32APIのkeybd_event関数使え
さっき言ったPRTSCでスクショできない問題も解決できてるから、
恐らくターミナル操作もできると思う コレ(>>315)は仕事の話だけど、別に上司に言われてやってるんじゃなくて、仕事の効率を上げる為に自分が勝手にやってるだけ。
俺はExcelを使ってるけど、他の人は画面を見て手打ちしたり紙に書き写したり、何なら電卓叩いてる。
で、今は会社のシステムのマクロ(Excelで操作を記録するのと同じ様なモノ)にEntを登録して、画面上部にあるそのアイコンをVBAでマウスを操作してクリックすると言う、無理矢理なやり方でやってる。
やっぱりWin32APIでやってみるかな。
みんなありがとう。
長文でスマン。 いくつか疑問が :
(黒バックに緑の字)で“数字→Ent”で画面表示を切り替えて行く ここは実際のキーを叩いてる?
ユーザーフォーム上とかの数字をクリックしてEnterボタンとかを押してる?
“{ENTER}”でも“~”でも ENTERには{}付けてるのに ~には{}付けないのは単なるタイポ?
(黒バックに緑の字) それってPower Shell とか コマンドプロンプトとかで無くて?
どうしてもSendkeyでEnt(テンキー側)が押せない テンキー側である必要は? メインのENTERキーが押せれば充分なのでは? >>323
一部のターミナルエミュレータ(IBM iSeriesとか)ではテンキーのEnterとテンキーではないEnterや、
右ctrlと左ctrlなんかに別々の動作が割り当てられてるからでしょ
PSやコマンドプロンプトなら別の動作ではないし、
画面の配色もデフォルトで黒地に白文字でわざわざ変えるとも思えない あぁ、「会社のシステム」ってのが別にあって、他の社員はその画面上だけで処理してるけど
相談者はそこに別途起動したExcelでキー操作したい ってことか?
だからメインのENTERキーとテンキーのENTERキーは区別して使いたいと?(メインだとベースのシステム側が
反応しちゃうから とか) 結構無理やりな使い方のような
Sendkeysはプレーンの状態しか想定してないような もうひとつのシステムとのアクティブが問題とか?
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/keycode-constants
Sendkeysはやめて、ここのキーコードでコード書いた方が安全安心なような >>322
指示されたとか業務を請け負ったわけでもなく
自力でできない改造を勝手にやって周りに困ってるとか言い出してるのね
他に優先する仕事無いの? >>315です。
もうSendkeys以外でやろうと思っていましたが、323さんが疑問を持ったままだとモヤモヤするでしょうし、一応返信しておきます。
注意:長文・駄文になるので、興味の無い方は無視してください。
(レスアンカーが多過ぎたので、レス番号のみにしています。)
まず会社のシステムをソフトウェア名で検索したら、まさに324さんが言っているモノでした。
今やっているのは、その操作をExcel_VBAからSendkeysで叩かせてメニューを操作し、必要なデータをExcel側に持って行って処理しようとしています。
(会社のシステム上では、現状その処理が出来ない為。)
主に毎日出るデータから必要な数値を関数を使って抜き出して計算する為です。
現在その作業をやっている人があまりにも時間が掛かり過ぎていて、作業効率をUPする為にやっています。
(画面上の数値を目視で探して紙に書き留め、電卓で計算してExcelに手入力すると言うアナログな方法です。)
テンキー側のEnterが押せない以外は出来ていて、作業時間は1/3の以下に出来ました。
自分も323さんが325で言っている様に、無理矢理な使い方(特にEnterの入力法)をしているとは思っています。
もう一度調べ直して、325のリンクのキーコードに切り替えてみます。
ありがとうございます。ヒントになりました。 無知な人は無知だから解決方法のアプローチすら間違う
IBMのCOMオブジェクトがあるだろ 少し囓ったレベルでそもそも何を使ってるかすらわからなかったようなレベルの奴が変に弄くり回すなよ 無知は恥じることじゃ無い 怯むことでも無い 懸命に解を見付けようとするのは悪いことでも無い
ただ、敵(IBM iSeriesとか)の壁は高そうだ 敵を知り己を、って奴が遠回りでも結果的には近道なのか
IBMのCOMオブジェクトというヒントだけでゴールに辿り着けそうなら進んでもいいかも知らんし(やめとけ)
エミュレータで運用しなきゃいけないほど投資も出来ず利用者も不平不満を言えないような環境なら
それ壊したら損賠しきれない被害になるだろうから、ヘタに横からアドバイスも出来ないんだな(やめとけ)
結論はいぢくりまわすのはやめとけ てことで >>330
> エミュレータで運用しなきゃいけないほど
今時ダム端末なんて使ってるところ無いよ
というよりそもそも作ってすらないでしょ
それともサーバを直接叩けっていう意味?
知ったかぶりでマウント取るより素直に質問や礼ができる>>327の方が将来性があるよ いや、>>324が例をあげて質問者が「それだ」っつーから「なにそれ?」でググったら
https://ja.wikipedia.org/wiki/IBM_i#/media/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Ibmi-main-menu.png
こんなんが出てきて、そういやどっかで見掛けたことあるな、とか思って、これだとフル画面だけど別途Excel開けるだけの
スペースが画面上にある様子だし、ターミナルエミュレータって書かれてるし「いぢるな」に成ってもおかしくないだろ?
Win11でもWindows3.1のゲームが出来る(どころかスーパーマリオまでできる)
https://archive.org/details/softwarelibrary_win3_games みたいなもんだろ(ちがうか)
リモートデスクトップやTeamViewerみたいに、キーボード操作もマウス操作も別画面に吸い込まれる みたいなもんだろ 違うのか? そもそも開発環境が用意されてるわけでもなく本番環境でやろうとしてるのは明らかだろ
それも無断で >>332
全然違う
ググらなきゃ分からない程度の知識でマウントかよ マウントマウントうるせーよ 何でもマウントだと思うその僻み根性直せよ
どこがマウントなんだよ 忠告っつーんだろが 引き留めてんだ
つまんねコト書いてねーで、知ってんなら対策と傾向教えてやれや できねんか? 改行とエンターキー別にほしいよねー
あとバックタブも必要だわ >>337
無知は恥じることじゃ無い
忠告の前提が間違った知識あるいは勘違いに由るものなら
その忠告は間違っているかもという自認はしておくべき
俺は自分の環境(iSeriesの前身AS/400、ターミナルエミュレータはiSeriesと同じ)で使えたAHKって代替策と、
Win32API叩けばできるって代替策案内した
あなたはマウント取ろうとする以外に何かしたっけ? どこをどう読んでも新人のヒラ社員(歳が若いかどうかまではわからんけど)が悪戦苦闘してる風 と、
方や、それなりに業務をこなしてきただろう人物が経験則を元に導き出した解で効率化を成し得た のと、
そういう読み方をしたんで、やめとけ・無理すンな、と
そのAHKとかWin32API叩く方法が、左程メインのシステムに影響を及ぼさず問題無く解決できる手段だとするなら
相談者もそっちにすがった方がいいんだろう どちらを選ぶかは相談者次第 とりまkeycodeのリンクは貼った 今来てよくしらんけど、ExcelでRPAもどきなんてするもんじゃねえなと思いましたまる 予めリスクのコストを計れるならやらない手は無いだろうけど、住人の指摘で「まさにそれ」って応じてるレベルなら
後先顧みずに無鉄砲な操作が先走ってるということでもあり、めくら蛇に動じずの喩えにハマってるようなもの
本職だって他社のシステムと云われた途端にそれなり身構えるものだろ?
リスクコストそっちのけで「こうしろ」だの「ああしろ」だの無責任に言い募れない だからやめとけと
うん、こう書いた方がかっちょ良かったかも 上のカキコは無しで そもそもSendkeysってキーボードの操作をアクティブなウィンドウに送信してるだけなのに『いぢくりまわす』ことになるの?
リスクって何?
それがダメなら手入力での作業も出来ないでしょ。
あと作業時間が1/3になってるんだから実際に効率UPしてるワケで『それなりに業務をこなしてきただろう人物が~効率化を成し得た』は意味不。
手書きと電卓のどこが効率的なの?
まぁ~やり方が強引なのは間違いないけど。 comがあるならセンドキーは愚策でしょ
しらんけど ちょっと囓っただけの知ったかが色々やらかしてくれるのはよくある >>343
素人が勝手に作ったマクロをその内容も知らずに別の素人が使ったらどうなると思う? >>346
そんなのマクロに限った話じゃない
素人がシュレッダーで書類切っちゃったらどうするとか、
素人が容量超えてるコンセントにプラグ刺しちゃったらどうするとかいちいち考えてるの? 師匠がSendkeysは使うなって言い残してたからそれに倣ってたけど、他アプリにも使える
https://excel-ubara.com/excelvba1/EXCELVBA421.html みんな大好き神髄サイト
>>340 は一行目が相談者で、二行目は経験者の>>324 を対比させてる
操作する相手のアプリが見知ってるモノなら万が一を回避できるかも知らんが、業者が納めたガチガチのシステムだと
どんな仕様かも不明の上、どのキーに何が割り振られてるか知れたもんじゃ無い
メンテ用とかで隠しコマンドとか埋め込まれてた日にゃあ(まあ、キー1個に割り振る事は無いだろうとは言え)
たまたま1/3で済ませられてても、イレギュラーな運用には違いない 壊した時のことを懸念してるだけ
キチンと上司上長の許諾を得てからの改良なら >>324 が手取り足取り教えてくれるかも知れない >>349
世のユーザーRPAほぼ全否定することになるじゃん 最近はVBAユーザーは神髄さんのサイトに移行しつつあるみたいね。
どこかのちょいちょいやらかし有名老舗サイトが超されるのも時間の問題 >>350
だから、「ノウハウもない能力もない素人が勝手に」が問題なんだろ ユーザーRPA製品の売り文句知らなそうだな
誰でも簡単に作れるのをウリにしてるってのにw >>353
馬鹿はRPAがそれが理由で下火になって撤退が相次いでいることを知らんのだな
結局素人が作ったものは使い物にならないとか問題を引き起こすことがわかったからだぞ >>354
うちの会社でも馬鹿が一生懸命量産してるよ
これが自動で出来るようになりました!
って画像認識たっぷり含んでてHTML・CSSも知らないもんだから
サイトのフォントがちょっと変わっただけで
ストップするようなRPAが大量に作られてる >>355
そいつがその実績()を活かして転職して、残ったやつが嘆く姿が見える >>356
そういうやつの例が>>353というわけだ
この手の「素人でも~」というツールは結局素人とか素人に毛が生えただけの知ったかが使って混乱を引き起こすだけ
わかる人が作っても、ツールの仕様を他の誰かが理解していないとメンテ不可能になって終わる 自分でRPAの話しを出しておいて悔しかったからと捨て台詞 皆、キャノンのWebPerformer の仕事は嫌がる
この技術を覚えても、使い道がないから 黒画面に緑文字ってAS400じゃないの?
元からマクロ機能あるでしょ >>362
あるしコードはVBS使えるからスレの内容は必ずしも無駄にはならない 行数が同じ配列A,Bがあります
VBAで、ワークシート関数で言うとhstack(A,B)みたいな事がしたいのですがどう書けば良いですか >>366
二次元配列の列方向に連結したい、と。
配列AとBが同じ行数という前提なら、
こんな感じのコードで実現可能かと。
Dim C() As Variant
ReDim C(1 To UBound(A, 1), 1 To UBound(A, 2) + UBound(B, 2))
For i = 1 To UBound(A, 1)
For j = 1 To UBound(A, 2)
C(i, j) = A(i, j)
Next j
For j = 1 To UBound(B, 2)
C(i, j + UBound(A, 2)) = B(i, j)
Next j
Next i
これでCがAとBのhstack(A, B)に
相当する配列になるはず。 拡大率が違う画面を複数使ってるとコマンドボタン押せなくなるのはどうにかならんの?
100%と150%で使ってると、後者ではボタンがきかず、エクセル画面を前者側に持っていくときくようになる。 おおかた、モニターがスクエアだった時分のを未だに使わざるを得ない環境なんだろうが
150%になんかしないといけない環境を、いち早く改修することのが先決
そもそもディスプレイのカスタム スケーリングをしようとすると「テキストやアプリを読み取ることができなくなる云々」と
メッセージされる それを突破して設定してンだから、文句を言う筋合いじゃ無い
それとも、Excelの画面だけ150%にしてる? それだとちゃんとボタン押せるが? カスタムなんかしてないよ。
推奨が150%なんだわ。
会社で支給されたノートPCがフルHD、
自分が持ってるサブモニターが4Kなのでそんなことになってる。
しょうがないから4Kの方を100%にして合わせてるんだけど、んまー文字が小さいこと。 >>371
高解像度PC使ったことなさそう
Surfaceなんかもデフォルト150%だぞ どーもすいませんでした ボタンが押せないとかいう症状から勝手に憶測で書きました
じゃあ4KでExcel側を400%とか500%とかにしてもボタン押せない?
押せるような工夫が必要なんだから、押せる方のモニタ使うのとは別の解決が必要なんだろうし すごーく初歩的な事を聞いて申し訳ないですが
エラーが発生した時にどこで発生しているのか、どこで処理が止まっているのかを必ず表示させるにはどうしたらいいでしょうか? >>376
VBEを開けばエラーの場所が黄色くなってるはずだけど、そのVBEを開く作業まで自動化したいって質問ならそれは不可能 プログラムが正常に動かないからエラーがでる
入力ミスなら入力時チェックを入れればいい >>376
エラー処理を何も書かない。
そうすれば実行した際に
エラーが発生した箇所が黄色くなって止まっているはず。
エラー処理を付けたいのであれば、
エラーが発生した際の表示文言に
エラー内容、モジュール名、関数名等を
記載するようにする。
コードの何行目で発生したのかは
以前色々試したことがあったけど
結局上手く出来なかった。
なのでエラー行を捕まえることが出来たら
その方法をむしろこちらが教えて欲しいくらい。 度々すみません
mac os でsaveusメゾットを実行するにはファイル毎にアクセス権を付与する必要があると聞いたのですが本当なのでしょうか? >>381
saveusじゃなくてSaveAs
メゾットじゃなくてメソッド Application.Wait (Now + TimeValue("0:00:05"))でデータを随時取得すると
その間、エクセルでほかの作業が出来ないことが困っています。
他の作業をやりながらデータを定期取得する方法はありますか? >>383
Excelだけでは同時進行は無理
Googleスプレッドシートとか別の方法と組み合わせるしかない >>384
無理ですか。別でPC使用してやってみます。
ありがとうございました。 alt押しながらExcelを別インスタンスで起動すればできるんじゃね じゃね じゃなくてできるけど、誰かさんが嘘を回答してしまったので、質問者は去ってるな
同じファイルだと読み取り専用に成っちゃうけど
活発なスレならすぐさま誰かがいちゃもん付けてくれるけど、寂れてるとそれも叶わない
そんなのが繰り返されると雪だるま式に過疎ってしまう 諸行無常って奴か
アホの子が建ててる方のスレだと雑談だらけだけど、稀にまともな質問回答も混ざって来る こちらを活性化すべき >>386
>>387
まだいます。
別インスタンスというワードを初めて聞きました。
ググってみたら色々出てきたので調べてみます。
分からないことがあればまたお願いします。ありがとうございました。 >>388
別インスタンスはタスクマネージャ見るとわかるけどExcel.exeを複数起動する話
普通はブックをダブルクリックなんかで開くと1つのプロセスで複数ブック開くからブック間のシート移動なんかができるけど
複数のプロセスになるとそれができない
それとダブルクリックで開くとWait中のブックで開こうとしたりするから開くときはファイルを開くで開かないとだめとか注意が必要
まあVBAの話というよりExcelそのものの話だからソフトウェア板のExcelで聞いたほうがいいかもね 相談されたのでここで相談させてください。
毎日製造部の自動画像判定機のデータが3000枚くらいjpgで排出される
OK、NGの判定をjpgのデータ名に取得してくれればまだいいのに
まさかのこっちは判定するだけ、こっちは写真取るだけという連動してないゴミ仕様
jpgは日付時刻のみ、
抽出やふるい分けをするのに
画像の特定の部分の色が赤か緑かでRGB処理させるのは化石すぎるかな?
素直にpythonや他のツール使うべき何だろうけどVBAで何とかしてきたおじさんだから今更新しいのは頭に入らない、、 そうね
excelには.Netで言うBackgroundWorkerみたいな機能がないからマルチスレッド処理みたいなのやるにはちょい頭使わないといけない。
比較的お手軽なのはVBS立ち上げてそっちから今開いているお目当てのEXCELに書き込んでやることかな?
VBSなら文法はVBAと一緒だし、変数はスカラー変数だったりVBAみたいにトレースが出来なかったりとかちょい面倒な面もあるけど、
こなれた言語だからググれば方法はすぐ出てくると思うよ。 >>390
その自動画像判定機メーカーお薦めのアプリとかあるんじゃないのか? 新旧メーカー雑多に混在してるとか?
毎日3000枚を一枚ずつシートに読み込んで判定してくとか考えてる訳じゃあるまい?
そもそも、NGをその場でハネるために撮影してるんじゃないのか? OK・NGまとめて流して、後で画像で判定?
非効率も甚だしい 社長に直談判して専用アプリ入れるのが長期的な目で見ても賢明
あと、出来もしないことは請けないように まだ相談の段階だからいくらでも断れる
https://vbasokkou.dokkoisho.com/bmp.html
https://vbaexcel.slavesystems.com/vba/?p=404
https://mamesand.com/image/image_processing_j.html こういうのに目を通して容易に理解できそうなら引き留めないが VBAしか知らないような半端な知ったかに業務システムを組ませるとロクなことはない >>390
残念ながら君には無理
引き返す勇気も必要 >>392
ありがとう
これ使えるわVBAでいけると確信 待て待てw あくまでもVBAで画像ファイルを扱うサンプルってだけだぞw
実務に載せるにはこれを踏まえたうえでとんでもない工数必要なのを、この時点で予想できんのか?
日に3000枚だろ? まあ、やりたきゃどうぞだけど、またこれでひとつの企業の発展が遠退くわ VBAしかわからんくせに自信を持ってるような奴に何を言ってもむだ >化石すぎるかな?
質問はこれなんだからYesかNoを返してやればいいんじゃね
VBA自体は化石言語(ツール)でもなんでもないからNoだろ
そもそも今までどうやって(どの程度の時間で)3000枚/日のjpegを処理してたかわからんけど
それが大幅に改善できるならなんでもいいんじゃね いや、今まで作ったプロシージャと応用したら出来たわ
社内での正式運用するソフトの提案は情シスに投げといた
自部内の常用してない共用パソコンで動かしたらいつの間にかふるい分け全部出来てた
最適ではないけどVBAおじさんでいいわ いや、実験レベルなら組めても実務で使うのとはことなる
そもそもエクセルなんか使ってはダメな例 よく見ろ 自演だ しかもどーせ成りすまし
例示のリンク先も自分で見付けられないようなレベルで、教えられた翌日、半日で仕上げられる訳も無い
情シスに投げた? 情シスの仕事は?w VBAロートルじじいに相談して、そ奴がこしらえたVBAをベースに
開発するのがお仕事か? 社内から要望 → 情シス → じじい → 情シス なんちゅう経路だっつーの そら、ITも衰退する訳だ >>403
確かに自演だな
こういう奴が一番厄介
まあ、困るのはこんなのの言うことを信じる会社だからな
こうやって日本の品質が落ちていく え?自演?そもそもどれが自演なんだ…
まさか>>402の人が書いた皮肉レスを文面通り受け取ってるのか…
トヨタグループティア1の品管だけど
情シスなんて社内の部署の細かい要望なんて聞いちゃくれんぞ
情シス仕事はこっちが聞きたいわ
勤怠システムや文章システム管理してるぐらいだぞ
中小は知らんが、自演なぁ…変なの 問題解決に至るレスも満足にしないくせに難癖だけつける奴がこのスレ多すぎだよな
お前の方がスレの中で見たら無能なんだぞってわかれって感じ 触らない方が良い
触って貰うと嬉しくなって繰り返す、
話し相手のいないおじいちゃん達だから お願いします。
今日の日付を取得し、A列から一致する日付を探したいのですが上手くいきません。
表示形式を画像のように mm/dd(aaa) としているのが原因のようですが変更方法がわかりません。
ttps://i.imgur.com/yryvsxM.png
currentDate = Date
Set foundCell = ws.Range("A1:A" & lastRow).Find(What:=currentDate, LookIn:=xlValues, LookAt:=xlWhole) >>410
Set foundCell = ws.Range("A1:A" & lastRow).Find(What:=DateValue(currentDate), LookIn:=xlFormulas, LookAt:=xlWhole) 初歩の質問ですが、シート増やしたりするマクロ組むと一瞬画面がガチャガチャして結果が表示されるんですが、何かバックで動作して結果だけ表示される方法はないですかね? アプリケーションスクリーンアップデーティングファルス >>414
ありがとうございました!できました。スッと表示されるようになりました。 falseをファルスと読む文化かな
nullをヌルと読むみたいな 昔にこのスレかExcelスレか忘れたけど、フォルズなのかファルスなのか軽く揉めた事無かったっけ? Appleをアップルなんて読むのはダサいみたいな?エポゥってか [ false 読み方 ] Google
フォールス、またはフォルス それはw 小学生の英語ぢゃねーか どうやったら間違えるんだ
独仏伊蘭どの言語でも無く英語でしか使わないってのに 耳文字でエウスってか? それ言い出したら全部違うけど Warning incoming missile!
ウォーニン インカミン ミッソー!
で覚えた Countif=コウントイフと言ってるようなもんか?? なかなか 俺のファルス発言で盛り上がってるじゃないか
コンピューターに英語で話しかけてるわけではなく、所詮 記号なんで覚えやすいファルスで頭の中は統されてるわ
それに Falseって普通の文章や 会話で使ったことないし、フォルスを使わなくて困ったことないわ 兎に角
なんだかよくわからない
長ったらしい英単語は
アイエニューメラブルってよんどけ >>435
ありがとう そういう意味だったんですね
>>433
托をキモと読ませるのはFalseをファルスと読む100倍斜め上いってるとおもわんかい?
まあそのあたりに気づくほどのオツムがあれば433のような書き込みはしないだろうけどな(笑) ワッチョイなしスレから誘導されてきました
t検定で「範囲」にCOUNTIFやAVERAGEIFみたいな感じで対象とするセルをIF指定することはできませんか?
検定したい群を最初から整列して2群に分けておく必要があるでしょうか? >>438
WorkseetFunction使ったらいかんの? そもそもt検定なら元データが2群でないと成り立たないだろ >>437
キモいのはファルス自体じゃなくそういうところ みんなは重複をなんと呼ぶ?
ちょうふく?じゅうふく? 仕事を引き受ける時には
今までした事のない事、やった事のない事、実績のない事は
「やった事がないので出来ません」
とハッキリ言って断るべきなんですよね? >>447
やったことないということは伝えるべきだが、断るべきかどうかは違う >>451
ID 変えても ワッチョイで身元バレバレの托托ちゃん(笑) >>450
職場の私よりお偉いさんたちは
出来もしない事はするな
とか
できるのか出来ないのかわからない事はできると言うな
とか
出来ると言って出来なかったら嘘つきとか詐欺師とか
そんな事を言ってきます
なのでやった事のない事、実績のない事は やるな
という事なのだと理解しました
どうして未経験者に経験や実績が最初からあるのでしょうね
会社は学校じゃないらしいです >>453
仕事頼まれて内容を確認しないでこんなの簡単とかすぐできるとか言う奴もいるからな
そのつもりで頼んだのに後になってうまく動かないとかなったら上司の責任問題になる >>454
私はそう言う事が初めての経験で全く何が何だかさっぱりわからなくて理解が出来ていません
それを言うならば未経験の事はするな、引き受けるな、出来ると言うな
という話になると思います
それにOJTとはなんですか? あなたが欲しい答えはこうでしょう。
誰々が断れと言ったので断ります。 私は今まで働いてきて聞いた限りの話では
出来ない事を安請け負いするな、仕事だから
みたいな話なのでこれからはやった事がない事は全て断ろうと思います >>452
セルラー通信だから勝手に変わってるだけで、
ID:Snmtqfef0とID:Wxh+dghv0みたいな丁寧な自演と比べちゃダメでしょw >>458
日付が変わってるから ID が勝手にしろ変わるだけでそれを自演と言われちゃな
やっぱ妄想がひどいわ(笑) >>457
もし何もできないのであれば全ての仕事を断ればいい
それで給料もらえるのかは知らんが >>460
出来ない事やわからない事を出来るというな、とか引き受けるなとか言うなら
何にも引き受けられませんよー 出来るか出来ないか分からないときは調査費用見積もればいい
身内相手でも時間くれでいい
話通じないならもう無理でええやろ、次に行く >>459
遠回しに言っても理解できないみたいだから丁寧に言うと、
> なかなか 俺のファルス発言で盛り上がってるじゃないか
匿名掲示板で自己顕示欲を発露させてるのがまずキモい
それも誇れるどころかむしろ恥である読み間違いにおいてってところがまたキモい
> コンピューターに英語で話しかけてるわけではなく、所詮 記号なんで覚えやすいファルスで頭の中は統されてるわ
>
> それに Falseって普通の文章や 会話で使ったことないし、フォルスを使わなくて困ったことないわ
誰も聞いてないのに間違いの言い訳始めるのがキモい
角行間に改行入れてるのがキモい
隙あらば自分語りがキモい
それらを踏まえた上での托
要するに間違いそのものより精神性が気持ち悪い やったとこがない仕事を勉強してやる事さえ否定的な考えの人たちが世の中には多いみたいなので
やった事がない事は何もするべきではないのでは
私が色々聞いた話の理解では、例えば医療従事者は例えどんな些細なミスでも許されない、という様な話でした >>465
本当に全部しょうもない理由で他人をキモ呼ばわりしてるわけだ
その偏狭な精神性がキモいわ
NG 登録しとくから さよなら >>466
仕事しない会社員は会社辞めるしかないんじゃね ワッチョイなしもありも雑談スレに成り下がってほんと不快だな
どういう生き方したらこんなゴミみたいな人間出来るんだろ 雑談スレを作っても誰も使わないから無駄
ここの惨状を見てみ
【質問不可】Excel総合相談所スレの雑談・議論スレ5
https://mevius.5ch.net/test/read.cgi/bsoft/1624005735/ 簡単なユーザー定義型(2~3値を格納しておくだけの構造体)をtypeじゃなくクラスで作って、dictionaryオブジェクトのitemに9万個ぐらいインスタンスを紐付けたら、
コード終了時のオブジェクト解放にめちゃくちゃ時間がかかるようになった(数十秒)
やっぱこういうときは配列にするしかないのかな? >>472
スピードを取るか保守性を取るか
スピード優先ならクラスなんか作らずに単純な配列にする
たった数十秒なら俺ならそのままにする オブジェクトの開放だけで数十秒もかかるのか
俺もその手法を多用するから興味あるな
俺が扱うデータは一万から三万行程度だけどどのコードも一~二秒くらいで終わる >>473-474
レスサンクス
言われてみると確かに時間かかりすぎてるし変だなと思ってよくよく確認したら、
まず、9万個のインスタンスを紐付けた辞書の他に、16万個のインスタンスを紐付けた辞書が作られてた
更に、プロパティの一つに別のユーザー定義型のインスタンスが格納されてた
(コンストラクタあるしGetプロパティもSetで返ってたが見落としてた)
そっちのクラスのデストラクタが書かれてなかったので記述したら、普通に一瞬で終了するようになった
色々と教訓になった、ありがとう MsgBoxがUserFormとシートの間に挟まって見えないの何だぜ >>475
デストラクタにどんな処理書いたら早くなったんだ?
デストラクタに処理を追加して早くなるとは思えんのだが 使ってないインスタンスを随時終了させたってだけでしょ
意図しないオブジェクトがメモリ圧迫してたなら速くなって当然 >>480
随時なら、デストラクタに来るまでに解放するってことなんだが...
デストラクタで解放されなかったメモリを解放したって話なら、循環参照してたぐらいしか思いつかんが
それをデストラクタの段階で解放して処理が早くなるとは思えんが
そもそもメモリ圧迫で速度低下したって話なら、もとの
>コード終了時のオブジェクト解放にめちゃくちゃ時間がかかるようになった
ってのが間違った前提だったって話になるんだが >>481
まぁ、デストラクタの記述でメモリが開放されることはないのはあなたの言う通りだね
文面を読むにClassTerminate記述のことじゃなくて
単に意図しないオブジェクトに対してNothingを設定したって意味だと思ってたけど違うのかな? 実際のところ、VBA使用者の中でオブジェクト指向まで
使えるようになる人の割合ってどの程度なんだろう?
ただ配列が使えるようになるとかとは学習コストの次元が違うから相当少ないとは思うけど、
他言語やってた人ならオブジェクト指向は使えて当然だしなぁ。 哲学的な話になるけど
単なる事務仕事の自動化にオブジェクト指向の出番はほとんどない
使わないけど知識として覚えるだけならVBAは教材に向いてない 使う使わないは一先ず横においておかないと話が噛み合わなくなる 半角アルファベットと記号の文字列があると仮定して
半角カタカナに変換して
[0(ゼロ)]と[O(オー)]、「I(アイ)」と「l(エル)」と「1(イチ」
の違いをわかりやすく可視化する時
どう組まれてますか?
0O10l1I ⇒ ゼロ,オー,イチ,ゼロ,エル,イチ,アイ
全部パターン分けで組まないといけない感覚あり ConsolasかCascadiaあたりでも使えばいいだろ そうですよね
「Consolasでいいじゃないですかw」という話をしていました(汗 継承もできない、まともなエラー処理もできない言語
そんなのでオブジェクト指向プログラミングなんて苦行をあえてする必要ない
VBAでオブジェクト指向プログラミングすることが目的の奴だけがやるべき
openPyXlとかxlwingsとか使ってpython使うのが正解 じゃあそもそもVBAのクラスモジュールは何の為にあるんだよ UIAUTOMATIONでWindowsアプリを操っていたら、突然アプリが落ちた!
さあ、エクセルとアプリ、悪いのはどっち? クラスモジュール、普通に便利だけどね
特に再利用と拡張が楽なのがいい
そういえば継承をVBAで使いたいと思ったことないな
合成、オーバーライド、インターフェースあたりは使えればいいなとおもうけど
でもそんなのよりパラメータ付コンストラクタを普通に使えない、とかのほうが俺的には余程ストレスだな >>479
Class_TerminateにSet xxx=Nothingを書いた
諸々の処理が「終わってから」なかなか終了しなくなったんで、たぶんどこかで循環参照になってたか、カウンタがゼロにならないとかでオブジェクトへの参照がまだ残ってる判定になってたんだと思った
でも、今同じように戻しても再現しなくなってしまったが、コードを変えた直後の最初の一回だけ終了にやたら時間がかかるケースが出てきた
(「コンパイル」を実行して保存しても最初の一回だけ遅くなる)
クラスが7つもあってごちゃごちゃしてるから、その辺から整理しないと本当は何が悪かったのかまで今はまだわからん >>497
オーバーロード、オーバーライドは使えないけど
インターフェースは使えるよ。
パラメータ付きコンストラクタは使えないけど
その辺拘るならCallByNameやAPIのコールバックで
何とか汁。 自動でインデント調整を行う方法があれば教えてください。
今まではSmart Indenterを使用。windows10、エクセル2010
windows11、エクセル2021にしてからは使えなくなってしまいました。下記を参考にインストールしましたが出来ず。
http://tradememo.techblog.jp/archives/73543570.html >>498
そのxxxはどこで定義された変数で、何が入っていたんだ?
つかほんとに単にメモリ不足で速度低下してるだけの気がしてきたな 人名がずらずらと並んでいるプルダウンをチェックボックス形式にする。
一人だけ選択ならそのままセルに入力され、複数人選んだら一人目の頭に@
半角スペースが空いて二人目の頭にAと自動でついて入力されたらとても嬉しいのですが、
どういうコードが考えられるか悩んでおります。 21~50までは、「挿入」-「記号と特殊文字」で出て来るダイアログから選べば可
51以上は丸文字をWordの機能を使って入れる形式 ← 面倒臭い 使うとしたらせいぜいIまでです。
色々ご回答ありがとうございます。 丸数字を配列にしておくなり文字列にしておくなりして
人数の位置から配列や文字をMIDなりで取得して編集すればいいんじゃね 文字コード11553が①
文字コード11554が②
つまり =сhar(11552+A1) で丸付き数字に変換できる >>506
俺も諦めてそうしたことあるわ。
スターどっきり(秘)報告とかさ。 >>502
ここまで目的が、決まってるなら ビーイングに聞いたら教えてくれそうな気がする
騙されたと思ってやってみ
完全ではないにしろかなり正しい流れはわかる >>502
513 だけど ビーングに聞いてみたよ
回答結果 貼っておくね
正しいかどうかは自分で判断してね
そのような処理を実現するために、次のようなコードが考えられます。
```vb
Sub CheckBoxToCell()
Dim i As Integer
Dim count As Integer
Dim result As String
count = 0
For i = 1 To 10 ' チェックボックスの数だけ繰り返す
If ActiveSheet.CheckBoxes(i).Value = 1 Then ' チェックされている場合
count = count + 1
If count = 1 Then ' 最初の選択肢の場合
result = ActiveSheet.CheckBoxes(i).Caption
Else ' 2つ目以降の選択肢の場合
result = result & " " & ChrW(9311 + count - 1) & ActiveSheet.CheckBoxes(i).Caption
End If
End If
Next i
Range("A1").Value = result ' 結果をセルに入力する
End Sub
```
このコードは、10個のチェックボックスがあると仮定しています。チェックボックスの数に応じて、`For i = 1 To 10` の部分を変更してください。また、結果が入力されるセルは `Range("A1")` になっていますが、必要に応じて変更してください。 >>515
それ、コメントも勝手に入れてくれてるの?
どんな内容で聞いたのか気になるが、結構使えるかもしれんな >>517
502の本文をそのまま貼り付けただけだよ
コメントもつけてくれる
意外とやるよね
特に メソッドとかプロパティとかを忘れた時に非常に 便利 意外とAIの書いたコード見た目は良くね??
まあ正しいかは分からんが。 AIは、ちょっと複雑なコードを要求すると、実在しない理想の関数とか持ち出してくる
その関数はどこにあるか聞くと自分で作れと言われる
そこの部分が一番知りたかったのに
半月ぐらい前に経験した実話よ Gandhara, Gandhara
From the United Kingdom
I'm looking for heaven
I'm going to California
だったか >>520
その関数の機能は AI の方から説明があると思うので それをそのまま AI に聞いて 関数を作ってもらうことはできないの?
完璧なコードでなくても大きなロジック が分かるだけでもすごく時間 節約になると思うけど ActiveXコントロールのイベントは、コントロールが配置されたシートのVBAコードモジュールに記述しないとダメなの? >>524
そのイベント内のコードからcall関数で一般のプロシージャを呼び出せばいい ビットマップファイルを読み込んで画素を1px x 1pxに幅設定したセルの背景色として割り当てて、
シート状にビットマップ画像を表示するプログラムを作りました。
うまくいくときはうまくいくのですが、ときどき、
「セルの書式が多すぎるため、書式を追加できません」
とエラーが出て処理が止まります。
chatGPTに効いたらActiveworksheet.Stylesを削除すればいいと言われたので、
For k = ActiveWorkbook.Styles.Count To 1 Step -1
If InStr("Hyperlink,Normal,Followed Hyperlink", ActiveWorkbook.Styles(k).Name) Then
'pass
Else
Debug.Print ActiveWorkbook.Styles(k).Name
ActiveWorkbook.Styles(k).Delete
End If
Next k
こういう処理をループにかませてスタイルを削除させていたのですが、うまくいきません。
端的にいうと、スタイルがそんな増殖しているわけでもないみたいです。47個ぐらいにしかなりません。
もっと別の理由で「セルの書式が多すぎるため、書式を追加できません」と出るようなのですが、他にどういう理由で
このエラーが発生する可能性がありますか。 >>526
Interior.Colorを設定した時に内部的に自動で追加されるスタイルは、実はStyles().Deleteでは消せない
これをマクロから消す方法はなくて、ワークシート全体の書式をクリアしてからExcelを再起動するしかない
あと、Google検索で解決できない質問は、ChatGPTに聞いても無駄だよ
同じブログや質問サイトから答えを拾ってきてるだけだから >>526
画像を続けて何枚も表示したいときは、もう一つ解決方法があって、画像を15bitパレットに減色すれば(ほぼ)エラーが出なくなる
15bitパレットにする一番簡単な方法は、RGBそれぞれの下位3bitをすべて100(2)などに固定する
ただし微妙な階調は表現できなくなる ドンピシャな回答ありがとうございます
やはりstyles().deleteで削除できないスタイルなんですね。
RGB関数を使って背景色割り当てていたので、組み合わせが膨大になって書式の限界値超えてしまうことが原因ってことで、色調をもっと荒くしてみます。
実際問題画像の綺麗さは二の次でして、AIの学習をエクセルでやるためにビットマップデータを読み込ませて誤差逆伝播法やるのが本筋で
画像表示はデモンストレーションです。
流石に何万枚も画像データの読み込みは無理ですが、ある程度の精度が出るくらいはエクセルでも処理できるのではないかという目算です。 Worksheetfunctionで配列数式を入れたいのですがそういうコマンドってありますか?
forで代用するしかないのでしょうか? 今月(2023/6)に入ってから、今まで問題なく使用できていたマクロの処理時間が異常に長くなる現象が発生しています。
処理を一つ一つ試していくとCopyメソッドに特に時間がかかっているようです。
実験として以下のコードを作成してみました。
Sub CopyTest1()
Dim i As Long, maxRow As Long
Dim STime As Double, ETime As Double
STime = Timer
Application.ScreenUpdating = False
maxRow = Cells(Rows.Count, 5).End(xlUp).Row
For i = 1 To Cells("A1")
Cells(2, 1).Copy
Cells(2, 2).PasteSpecial
Cells(2, 3).Copy
Cells(2, 2).PasteSpecial
Next i
Application.ScreenUpdating = True
ETime = Timer
Cells(1, 2) = ETime - STime
Cells(maxRow + 1, 5) = ETime - STime
End Sub
A1セルの値が5の状態で10回実行し、E列に書き出された処理時間(秒)は以下の通りでした。
{14.82, 2.00, 5.67, 14.82, 2.00, 14.82, 14.82, 14.82, 14.83, 14.83}
また、ペーストを行わず、コピーだけをForで繰り返した結果は
{14.83, 14.82, 14.83, 14.82, 3.84, 14.81, 7.50, 1.99, 13.01, 14.83}
コピーを1回行った後、Forでペーストを10回行うようにした結果は
{0.05, 0.05, 0.03, 0.04, 0.05, 0.04, 0.04, 0.04, 0.04, 0.05}
問題が発生しているのはExcel2021を使用しているPCのみで、同じネットワーク内のExcel2019を使用しているPCでは処理速度の低下は確認できませんでした。
セルの書式をコピーしたい場面が多いので配列を使用するのも難しいです。何か処理時間を短縮させる方法はあるでしょうか。 Excel2019で低下しないならExcel2019使えば解決だな >>532
社内で使用しているOfficeはH&Bの買い切りで、2019は一部の部長や専務クラスのPCにのみ残っています。
なのでおいそれと「マクロ使いたいのでPCを使わせてください」と言うのも憚られます。
サブスクリプションでない場合でも過去のバージョンをインストールすることが可能でしょうか。
もしくは、過去バージョンの互換モードのようなものはあるのでしょうか。 >>533
同じマクロを別のPCで動作させて処理時間に差が出た場合、PC本体の性能の違いなのか
インストールされているソフトの違いなのかを切り分ける場合どんなテストが必要だと考えてますか? >>534
処理の早いExcel2019のPC
CPU:Intel Core i3 8100
RAM:4.00GB
処理の遅いExcel2021のPC
CPU:Intel Core i5 12400
RAM:8.00GB
となっています
個体差や処理との相性などがあるのかはわかりませんが、性能の高低による変化である可能性は低いと考えています。
先月くらいまではどのPCでも使えていたマクロが全く同じコードで低速化した点、
Excel2019のPCで>>531のテストを行うといずれも1秒以内で終了する点
などもそう考える根拠の一つです >>535
先月まで早かった処理で、Excelのバージョンが 2019→2021 に変わったら遅くなったということなら
Excelのバージョンの可能性はある
それ以外の違いに見落としがないなら >>356
先月まではExcel2021のPCでもコピーが遅くなる現象はありませんでした。
具体的な発生のタイミングは分かりませんが、今月頭か月中かのビルドアップデートも原因の一つではないかとも考えています。
Excelのバージョンが原因である場合、どういった対応が考えられるでしょうか? >>537
先月まで遅くなかったのなら関係ないと思うが
昔なら扱えるデータ(最終行)が違ったり、省略した引数の初期値が違っているとか
使うメモリ量も変わってくる
ネットワークの速度、セキュリティーソフト、ストレージの速度、空き領域、OS側なんかも影響出る可能性はある
あと画面の更新しか止めてないのも中途半端だし 昔自分が経験した備忘録だけど、IMEのよくわからんバグでofficeアップデートした際に極端に動作遅くなったことはあった
旧verのIMEにしたら治ったけど根治には至らなかった 低速化が発生していなかったビルド16327.20248に戻して実行してみましたが、コピー10回にかかる時間は大きく変化しませんでした。
試すのに時間がかかったのは、Officeの導入などが社外への委託となっていてプロダクトキー等がすぐに確認できない状況であったためです。
次は>>540のお話を参考にIMEのバージョンを試してみようと思います。 とりあえず場当たり的というか、根本的でない方法での解決ができたように思うので報告します。
まずIMEのバージョンでは処理速度の変化は見られませんでした。
PasteSpecialでなくCopyに時間がかかっているという状況から、クリップボードが関係していると推測しました。
クリップボードの初期化やCutCopyModeをFalseにするなど試してみましたが変化はありませんでした。
その後いろいろ調べてみたところ、某解説サイトの「クリップボードを使わないセルのコピー」というページでValueに引数を入れられることを知りました。
>>531のマクロを以下のように変更したところ、期待する処理内容で0.05秒程度までの短縮ができました。
Sub CopyTest1()
Dim i As Long, maxRow As Long
Dim STime As Double, ETime As Double
STime = Timer
Application.ScreenUpdating = False
maxRow = Cells(Rows.Count, 5).End(xlUp).Row
For i = 1 To Cells(1, 1)
Cells(2, 2).Value(xlRangeValueXMLSpreadsheet) = Cells(2, 1).Value(xlRangeValueXMLSpreadsheet)
Cells(2, 2).Value(xlRangeValueXMLSpreadsheet) = Cells(2, 3).Value(xlRangeValueXMLSpreadsheet)
Next i
Application.ScreenUpdating = True
ETime = Timer
Cells(1, 2) = ETime - STime
Cells(maxRow + 1, 5) = ETime - STime
End Sub
お返事いただいた方々に感謝いたします。 まあ最新のものにしたらろくなことがないの見本みたいな話だな。わしなんか2013なんで速いこと速いこと。絶対アプデせんからな。 リクナビnext
求人キーワード検索ヒット数の比較
Java 5300
SQL 2970
Python 2400
RPA 1800
VBA 238
ググれば簡単に出てくるVBA
採用側からしたらスキル扱いされてない現実
残念ながら
VBAでプログラム書けますって
Excel使えます程度 >>544
それだけ VBA が普及しているということ
日本語喋れますねというくらいに 基本的なスペック
お前ら VBA 使えないと 人間扱いされないぞ >>545
もちろん、ココで丁寧に教えてる方は素晴らしいと思う
ただVBAだけでは武器にならないのは、
転職サイトの検索数が物語ってる
企業が欲しいのは、
時代の流れに柔軟に対応出来る人材 >>546
VBA で頭が退化するならそんなポンコツ 脳は捨ててしまえ >>547
日本語喋れるだけでは武器にならないなと同じだな
でも VBA ができないと転職先でプロ 扱いされないぞ
ユーザーさん「ちょっと さ、こういうことできる マクロ 作ってくんない」
プログラマー「僕 Java の専門家 なんで VBA はわからないんです」
ユーザーさん「VBA じゃなくてマクロ だよ、 マクロ」
プログラマー「マクロ と VBA は同じなんですけど」
ユーザーさん「なんだよ エクセルも使えないのか 何で質問はこんなポンコツ やっとったんだよ」
ご愁傷様です >>549
おれはVBAを批判してる訳じゃない
実際、おれもVBAばかり使ってきた
ただ、おれが言いたいのは、
GoogleやYouTube、チャットGPTで幾らでも調べられる時代
VBA程度では前みたいに重宝されなくなったんだよ
他人と差をつけて貴重な人材になるためには
VBAに拘りすぎてたら手遅れになるってこと
転職サイトのキーワード検索数が全てを物語ってる
この業界はものすごい勢いで進化してる
ずっと竹槍で鍛えてても、
弓矢や鉄砲には勝てないのと一緒 549は竹槍しか扱え(わ)ない滅びゆく企業にしがみつけてることで悦に入ってるんだから、
そっとしておいてやれよ
猿が竹槍はつかえても鉄砲を認識できないようなもんだろ ここは質問スレで
VBAを丁寧に答えてる方に失礼になるから
おれは消えるけど
おまえら
時代の流れに柔軟に対応するんだぞ
何が出来るようになれば希少価値高い人材になるか
高年収GET出来るか
いつも考えるんだぞ
じゃあバイトに戻るわw >>552
システム部門が全て解決してくれるという 幻想にしがみついてる○○ 他に替えがきかないような貴重な人材なんてごく一握りだから
そんな恐れ多いことを考えるより自分ができることを考えりゃいいんだよ AIや時代の流れでVBAがなくなる時代なんて全然来そうにないんだけど本当にくるの?
ChatGPTに聞きまくって便利だけど複雑な処理はまだまだだと使うほど思うし
今更VBAどころかそもそも扱える人がほとんどいない
大手自動車グループに出向したときもそう
猿でも出来る、AIが全部やるようになる
ってネットで言う割にやれてもマクロの記録レベルの人
情シスなんて社内システムにかかりきりで他部署の依頼だったり共有するVBAなんて作る気もない
と外資系に勤務している俺は思うわけですが まぁ
VBAは他のObject指向言語やったことあるかないかで
組み方に雲泥の差が出るのは認める 5ちゃんでExcel触るどころか働いたことない様な奴が今時VBAなんて時代遅れとかAIで全自動化出来るだの今時エクセルなんて使ってる企業、とかただ脳死レスをするけどさ
Excel使わない企業をかつて見たことないんだけど
ゴリゴリの外資系でもそうだしトヨタ系でもそう
じゃあそういうニート連中は何を想像して書き込んでるんだ? ・何でもVBAでやろうとするのは時代遅れ、これは間違いない
・VBAいじれる人ってどこの会社、部者でも本当に少ない
・その人がいなくなると死ぬマクロも多いのも事実
・ChatGPTは本当に凄い、かなりお世話になるレベルで凄い、このスレの回答者なんてもっと凄い
ここで質問に答えてる人達に聞きたい
おたくらレベルの猛者って職場にゴロゴロいないでしょ?Excel、officeが無くなる気配ないでしょ?どのPCにも気軽に配布出来てこれがなくなる時代は俺の定年までくる気配ないんだが このスレの質問に答えてるレベルの人さ、
教えてくれよ
「俺のマクロの知識なんて職場の人達に到底敵わんよ」
なんて人はいないだろ、おたくの勤務先でも作る、メンテする、の中枢ポジだろ?
転職活動の時にVBA出来ますアピールなんて価値はないけど、異動や転職時に使える超汎用スキルだと思うんよ
車がハイテク化していく社会での自転車のような立ち位置だとネットで見た
自転車がなくなる近い未来は見えないでしょ? 職場で一千万とか二千万とかする解析や測定する設備を導入してるけどまぁ優れた解析ソフトが付随してるのよ
でも社内や社外に展開する時はExcelデータを欲しがるから結局ソフトからcsvかtxtでデータを吐き出すわけよ
閲覧出来る拡張子じゃないのととにかくExcelで欲しいと言われるから
繰り返し自動判定で学習させてく設備は担当者がpython使ってる
けど毎回、臨機応変に解析や測定する設備ほどVBAの方が手軽でかゆい所に手が届くんよ
ミツトヨや東京精密、島津とか設備メーカーの担当者と話しても高機能設備はマクロ組めるのが一番相性がいいと言ってる
VBAが化石化してAIが全てやる近い未来なんて俺には全く見えないんよ
ここの玄人ほどそう思ってるでしょ?
そういう人がまた別の高位の言語を学んでるのは正しいと思う訳よ 長文を全部読んでくれとは言わん
ここで質問に対して答えてるレベルの玄人に告ぐ
少なくともおたくらが定年まではVBAの需要がなくなることはない
AIがそれを減らすのは間違いないけど
おたくらは定年までは職場でVBAの頼まれ事をしたりこのスレで答えを提示する運命から逃れられん
ざまーみろ
さよなら >>562
あんたはわかってると思うけどAIをつかってVBAのコードを組めるのはVBAを熟知してる人だけ
VBAを熟知してないとAIのコードがうまく行かないときどこを直したらいあかわからん
AIと全ての言語は補完的。 ここのオマイラよりChatGPDの方が役に立つのは変わらんよ ChatGDPとかもググれば出て来るな いろんなバージョンあるんだな
ChatGDP、ChatGPD、ChatGDT ねーよ
脳内に Option Explicit 付けろよ プログラムする人間で文字打ち間違いする奴は信用に値しない そのシステムは動かないから
平文でお遊びやギャグ、ふつうにタイポ 以外で、肝心な所をスペルミスする奴はお里が知れる さよならと見せかけで再登場
>>563
そこのおめーさんよ
俺にレスしたのも何かの縁だと思って俺の長文のレス全部読んでくれよ
そして俺が頓珍漢な事言ってたら指摘してくれよ
そんなゴミにレスするような無意味な事すんな
ChatGPTを使えば使うほど凄さと便利さを感じるけどまだAIが完全に理解して自動化するまでの遠さも同時に感じるわけよ
説明の仕方が下手とかそういうんじゃないわけよ
脱Excel、脱officeをしてる日本と関わりのある有名な企業やグループがあるなら教えてくれよ
お前俺から絶対逃げるなよ >>566
そこの玄人臭のするおめーさんも俺の全文を読んだ上で俺をボコボコに論破するくらい絡んでこいよ
言ってる事がおかしかったら教えてくれよ
VBAにすがるわけじゃねーんだ
VBAが無くなる近い未来がみえねーんだわ 俺から逃げるなよ さすがアウアウ ちゃんと読めよ あんたに絡んじゃいないだろ ヨソの揉め事まで自分が絡んでると思い込めるその体質どうにかしろよ 酔ってンのか? そもそもVBA熟知していたらChatGTPなんか使わない
何故なら既に単一責任原則を守って作成した部品を
それを骨組みにして色々なツールを作れるくらいは抱えているし、
例え部品を持っていなくても自力ですぐに作れるから。
せいぜい、「あれどんな感じで作ってたっけ?」となったときにちょっと使う程度だけど
その程度ならネットで検索したりマクロ先生に聞くだけで十分だからね。 ChatGPT知らずに物言ってるのが哀れでならない
想像力が足りてないぞ >>561
マクロ組めるのが一番相性いいって
ただ生データを加工(グラフ化)するだけでしょ?
PowerBIとか使ってないの? >>559
> 何でもVBAでやろうとするのは時代遅れ、
分かるわ
ピボットテーブル、Power query、PowerBI…
この辺りの知識もなしにVBAに拘る時代遅れの残念な人が多い
あと、研究所でよくある話。
「計測器で得た生データを加工し発表用に仕上げ定期的に配信する」
この流れを考えた時、どうイメージするか。
•ネットワーク関連(IPアドレス、サブネットマスク、ping)
•データベース関連(logger、ロギング周期、データ形式)
最低限、この辺りを理解してないとねぇ
「データ貰えたらVBAで加工出来ますよ」って言う人いるけど
そのくらい誰でも出来るわってなる >>573
いや、VBAでそんなことやる発想自体が馬鹿の証だろ >>574
実際居るんだよ
VBAに拘る時代遅れの人
求人見て思うのは
拘りを捨てて柔軟に対応出来る人材が求められてると思う しょうもない揚げ足取り合戦はやめなさい
>>572
そんな簡単に済むわけないだろ
主要自動車メーカー、関連企業、グループ企業と各サプライヤで要求されるデータも仕様も全然違うししょっちゅう改定されるわ
VBAより柔軟に手軽に共有出来て設変出来るものがあったら是非欲しいわ
社内だけで運用管理するデータほどVBAなんて使わずにベース化しやすいだろ
骨組みが決まっとるし情シス軍団が貼りつくし仕様変更の頻度が少なくて済む
最大手はなんちゃらsparkやら投稿システムに数年で変わったけどそれまでのデータ作成はどこもバチクソVBA使っとる
理由は簡単
VBAというよりエクセルが世界一優秀なソフトだから
印刷プレビューの文字ズレというカッスい弱点を未だに抱えてるくせに >>567
563 だけど何か 誤解してないか
あなたの長文は全部読んだ上で賛成してるんだよ
だから「あんたは分かってると思うけど」と書いてるじゃない
VBA をディスってるやつに言ってるんだよ
562のアンカーをつけたのはあんたの話に関連してるから
これでいいかな >>577
わかってる上で全方位レスしてるだけ
普通に社会人やっててVBAが全く無くなる気配なんて全くないんだよな
レスありがとう
そしてここでとある業務
例えばCADとの座標関係やデータムの組合せも可能で自動測定プログラムも組める今の世で一番信頼性の高い測定値を出すのが接触式三次元測定機
世界シェア一位二位を誇る2メーカーが出してる
それ以外のを使う会社は馬鹿にされるレベルで突出した精度
社外とデータのやりとりする事前提とするともうVBA一択なんよ、しょぼいのに糞高いマクロをメーカーが有料オプションで用意してあるほどにExcel向けにソフトが出来てる
設計はCADソフトの社内データベース運用し始めた
生技はpythonやAI導入で設備を仕上げてる
経理や総務や人事は社内システムつこうてる
けど品証もpythonを導入し始めたけどVBAを使わないのは死を意味する
明日も居座るからVBAなんていらないニートおじさんはいつでもカモン いや、何かみんなVBA「だけ」やってる前提で話してるけど
どっちかと言えばそんな人の方が少数派なんじゃないの?
VBAはOfficeSoftに特化した言語だからEXCELやACCESS使うことが前提なわけで
VBAでWebサイト作りましょうとか、システム作りましょうとかはまずならない。
ただ、EXCEL扱うのにはVBA知ってた方が圧倒的に便利だし、
何か試す際にかなり手軽に出来るから
それはそれで面白くて気になるからこのスレ来てる人が殆どかなと思ってたけど違うのかな? 自分は十数年VBA使いまくってるけど、アラフォーで飲み込みも悪くて基本コード書くときはネットで例題見つけてはそれを加工してる
最近ChatGPT使い始めて、確かに簡単な注文するだけでコードガンガン書いてくれて本当に驚くばかり
ちゃんとコメントも付けてくれて、そして細かいダメ出しにもすぐに対応してくれる
でもやっぱり、最終的にはデバッグは自分でやらなきゃいけないから、結局はそのコードを自分なりに理解しなきゃいけない
そういう意味では、ネットで例題見つける時間を大幅に短縮してもらえるようにはなったなというイメージ
しかし、ネットで見つけてくる例題ほどの完成度はあるのか…?という心配が常につきまとう
シートの操作や簡単な統計のようなものならまだしも、詳細な理論演算とかは出力結果みてもそれが適切な解なのか自信がもてない
そしてこれまでの経験ではちょいちょいおかしな理論をもちこまれる
結局はネットでそれなりの権威の持ち主が公開してるコードじゃなきゃ怖くなってしまう
もしくは自分なりに理論的に構築したロジックをなんとか具現化したものでもなきゃ責任が持てない
ChatGPTでものすごい進化と変化は起こったけど、それで全てがリセットされるというのはまだ先の話かな
そして今後はChatGPTを使いこなすという技術があらたに生まれてくるのかなと思ってみたり
ChatGPTをエンジンとしたコード生成ツールとかできたりして >>558
>Excel使わない企業
Excelなんてこの世に存在しなかった
バブル崩壊前の日本は世界一の経済国だったな >>583
嘘つけ、バブル崩壊前にエクセルつかって金融新商品の計算バンバンやってたわ
ロータス123から覇権が交代した時代 ExcelできるってことはVBAもできるって事だよな バブル崩壊は1992年頃(MS-DOS全盛期)
Excelの本格普及はまだ数年後 Windows95, Plus!95, Office95の3点セットがお約束 ChatGPTにおすすめのエディターを聞いたらRubberduckを
勧められたんだが使っている人は多いのか?
ググってもあまりヒットしない。何がいいのか教えて >>586
それより前にMSDOSの上で動くwindows2とか3の時代があって初期のエクセルはそういうwindowsもどきの上で動いていた。ロータス123はのMSDOSの上で動いていたけど、もどきの上のエクセルのほうが優れていたから金融機関の先端部署はエクセルにシフトしていたよ。大衆に普及するのはwindows95以降だけど Win2は日本未発売、Win3.0はほぼ失敗作で改良版のWin3.1日本語版は1993年発売 じゃあ何で俺は使えてたのかな
海外の同僚に Windows 2.1 送ってもらったのかな
グローバルビジネスだから日本語 いらんのでそうしたかも
ともかく 海外の同僚がエクセルを使ってるのが羨ましかった記憶だけはあるわ むしろMSのOS使ってと1-2-3使ってない奴はモグリだろ
AppleのOSで使われてたのがExcelだし Windows2.x(いくつだったかは忘れたけど)は日本でも使われてたと思うけど ほぼ8801、9801の日本で使われてたわけねーだろ MS-DOSの時代からあったMicrosoft Works ワードプロセッサ、表計算、データベース、スケジュール管理、通信が
ひとつにまとまった、Microsoft Officeの前身みたいな製品 2009年10月まで販売されていた(らしい)
それと勘違いしてるか、若しくはもうすでに認知sy
5inchだったか3.5inchだったかのFD10枚セットパッケージにサンプル品としてExcel4.0デモ版が添付されてて
それでExcelの機能をお試しできた(らしい) >>596
NEC なんか使わなかったよ うちは
at とか MT とか言うようなやつを使ってた記憶がある Wikipediaによれば、PC-9800シリーズ用Windows 2.1日本語版は1989年6月にを出荷開始
あと「動け!Windows」なるサイトの「歴代Windows」ってページによれば、PC-9801用Windows2.0日本語版は1988年9月に販売開始 >>598
PC/AT互換機だな
そういや情報処理うんたらいう大会で相手校が持ち込んできたのもPC/AT互換機だったな、Windows95だったけど >>601
そうそう なんかそういう名前だった
エクセル使いたくてマックも導入したかもしれん VBAなんていらないおじさんがいないかハンティングにきたけど山に帰ったか
いいことだ
アメリカで優秀だと評判な韓国系の記事を前に読んだが名前もソースも覚えてない
キムなんとか?いわく
あるシーンを乗り越えようとする時、VBA(Excel)を使う選択肢がベストでない事を作る本人は理解している。だが、やろうと思えばVBAで最低限のものは出来てしまう。Excelがあらゆるものをそのレベルへの対応を可能にしてしまう。
それ故に良くも悪くもVBAは根強く残るのだ。Excelが優秀な事が足枷にもなるのだ。
「僕のオフィスは未だにExcelがメインツールなんだよ」
これは地球上の多くのカンパニーで呟かれているのさ
おしまい ちなみに俺のVBAの熟知レベルなんて一年生レベル
ここの回答者には心の底から尊敬しかないね
質問に対して見下すレスは好きじゃないが
ここまで偉そうに要約もせずに長ったらしいレスを延々と続けたわけだがこうみえてパワポの資料作成とプレゼンは多分ここの玄人には負けない
役員報告も毎回俺が担当してる
自動車業界のQC全国大会に北海道まで行った事もある
上にいけばいくほどみんなアニメーションが大好き
理想の処理をさせる玄人と違ってパワポ映えさせて口でそれっぽくストーリーを作る虚構の権化、それが俺
使えてもいないAIを知った風に語るニートが現れたらまた狩りにくるわ >>604
師匠と呼ばせてください。
師匠、Excelやっておけば社会で通用しますよね?
天下取れますよね? キムバレークラークのトイペはなぜあんなに使い難いんだぜ 横に長い表があります
これの入力用にフォームを作っていますが、セルの値のフォームへの反映、フォームの値のセルへの反映を簡単に設定する方法はありますでしょうか?
今は、選択しているセルの行数をもとに、フォームのテキストボックスのCONTROLSAUCEを変更するVBAを使用しています
アドバイスを頂けると助かります! 32bitが主流だったのは2013とか2016の頃までだろ
今はVBAでも64bitが主流
いまどきのモダナイズExcelで32bitは扱いづらい >>609
入力で手を抜かない
入力ミスをチェックする
カンマ区切りでsplitとか すみません、ヒント・アドバイスありましたらお願いできませんでしょうか。
ネットワークよりJSONを取得しExcel内に表展開するVBA付ExcelをWindows環境で使用しているのですが、このMAC対応で苦慮しています。
MAC対応のため一部コードの修正・変更を行い、自分が借用したMACでは何の警告もエラーもなく動作するようになったのですが、先方に渡したMACで動作させると、下記URL画像の警告が出てしまいます。
https://imgur.com/nq4WNPk
メッセージも何もありません。
バージョンは全く同じ Microsoft Excel for MAC 16.74 (23061100) です。
HTTP通信を行う部分は、JsonConverterモジュールの一部FunctionをPublicに変更いたしました。
また、MAC対応のためDictionaryクラスモジュールをインポート済みです。
なお、当方MACは非常に不慣れです...
どなたか、アドバイスありましたらお願いできませんでしょうか。 >>612
そうなんだ、自分の周りではまだまだ32bitが主流なんで自分も64bitに変えられずにいる
てかごく一部だけどファイルのやりとりすると未だ.xlsで返してくるところもある
早く64bitが当たり前になってほしいな >>616
他言語やっててもVBAくらいは使えるようにしとけ
Excel 使うならWebでJavaScript使うのと同じくらい重要だぞ またVBA否定おじさんが湧いてきてんのか
狩られる前に山に帰っとけよ すみません。ど素人なのですが
excelのコメントの背景に画像を埋め込んで
画像をポップアップ表示していたのですが
列の操作をしていたらコメント表示が崩れてしまいます。
その度に一つ一つセルを選択して元に戻していたのですが
セルを選択して選択範囲のコメントを元に戻すマクロを作りたいです。
Range("選択範囲").Comment.Shape.LockAspectRatio = msoFalse
;縦横比を固定するの解除
Range("選択範囲").Comment.Shape.Width = 385
;サイズと角度の幅を385に指定;
上記2つの処理を選択したセルで実行したいです。
どなたかご教授願えませんでしょう? >>622
Range("選択範囲”) の部分を Selection にする 条件付き書式設定だけを直接コピー&ペーストする方法はありますか?
PasteSpecial メソッドの xlPasteFormatsだと値もコピーされるので困っています。 >>624
xlPasteFormatsなら書式設定だけが貼り付けされるはず
値もコピーされる状況が再現できるならコードがどこか間違ってるんじゃないかな
xlPasteFormulasになってるとか-4122が-4123になってるとか あ、もし条件付き書式以外の書式設定を貼り付けたくないって場合ならPasteSpecialじゃできないよ
コピー元のFormatConditionsコレクションのインデックスをループして、
ModifyAppliesToRangeとかAppliesTo.Resizeとかで範囲を変えるしかないんじゃないかな
連レス失礼 バブル当時は零細企業なんてExcelはおろかPCは職場に1台あるか無いかでしょ ロータスとか一太郎使ってた奴は
今頃もう定年退職してるだろうな ロータス時代なんて教則本とかあまり無かったから、その世代の人達は自分で考える力が桁違いに高いね 今みたいにネットで調べることが出来ないので、サポートデスクに電話して教えてもらうんだけど、口頭だとなかなか言いたいことが伝わらないで大変だった。
爺の昔話は苦情が来るからここまで。 >>635
そのサポートデスクでさえ良く分かってなかったじゃんよ。
今は本当に便利な世の中 仕事でエクセル2003を使っています。
表の中に2つのSUM関数があります。
・0が表示されているSUM関数
・合計の数が表示されているSUM関数
マクロで、
「0が表示されているSUM関数のセル」
だけを選択する事は可能でしょうか。
自分でやった事は以下です。
・ジャンプ機能で数式をチェックする
「すべてのSUM関数」が選択される。選択不可。
・検索機能で、0を検索する
「検索条件に一致するデータは見つかりません」
と表示される。選択不可。
知識がなくて大変申し訳ありません。
皆様のご指導をよろしくお願いします。 検索対象に「値」ってないのか? 2003持ってないのでよくわからんが >>641
馬鹿はこのスレが何のスレか知ってるか? >>検索対象に「値」ってないのか?
数式
・数値
・文字
・論理値
・エラー値
ジャンプ機能の、数式の数値にチェックを
入れれば、SUM関数が選択されます。しかし、
すべてのSUM関数が選択されてしまいます。
「0が表示されているSUM関数のセル」だけを
選択できるマクロ・VBAはないでしょうか。 >>644
馬鹿が後付けの質問し直し
で選択してどうすんの?
馬鹿は消えろ Excel2021で勉強中で初歩的な質問で申し訳ないです
インテリセンスについて質問させてください
インテリセンスで表示される引数について、
[ ] で囲われた引数は省略可だと思いますが、
例えば、InStr関数については、すべての引数が [ ] です
これはどう理解したらいいのでしょうか?
https://i.imgur.com/RXDupxq.png
よろしくお願いします >>641
こんな方法があるようで。
Sub SelectZeroSumCells()
Dim ws As Worksheet
Dim cell As Range
Dim formulaString As String
Dim selectionRange As Range
Set ws = ActiveSheet ' アクティブなシートを取得
Set selectionRange = Nothing ' 選択範囲を初期化
For Each cell In ws.UsedRange ' シート内の各セルをチェック
If Left(cell.Formula, 4) = "=SUM" Then ' セルの数式がSUM関数かどうかを確認
formulaString = Mid(cell.Formula, 2) ' セルの数式を取得(=を除く)
If Evaluate(formulaString) = 0 Then ' 数式を計算し、合計が0の場合はセルを選択
If selectionRange Is Nothing Then ' 初めて該当するセルが見つかった場合
Set selectionRange = cell
Else
Set selectionRange = Union(selectionRange, cell) ' 2つ目以降の該当するセルが見つかった場合、既存の選択範囲に追加
End If
End If
End If
Next cell
If Not selectionRange Is Nothing Then ' 該当するセルを選択
selectionRange.Select
End If
End Sub 馬鹿連呼のイカれ野郎はこのスレにもいるのか?
早く回答しろよ >>647
インテリセンスの表示でなく、Netのヘルプ見たら string1とstring2 は[]が付いていないので
省略できないのが正しいと思う >>649
具体的なVBAをありがとうございます。
本とネットでプログラムを一つ一つ調べてみます。
ありがとうございました。 >>652
自分の間違いを認められない奴は二度と来るな >>645
>>で選択してどうすんの?
宿泊施設で働いています。
施設内に冷蔵庫が3つ(A・B・C)あります。
盛り付けた料理を冷蔵庫に運び、保存します。
お客様の人数が少ない日は、AとBだけ使い、
Cを使いません。
(エクセルの表)
A小計・B小計・C小計・ABCの合計
@空白セルを選択、ムダな列を非表示
★ACのSUM関数による小計0を選択、ムダな列を非表示
B表全体を印刷
Aが「0が表示されているSUM関数のセル」です。
AさえVBAで自動化できれば、@からBまでの
すべてを自動化でき、ムダがなくなります。
ややこしい説明で申し訳ありません。 >>653
おっしゃる通りです。こちらはVBAのスレ
でした。スレを汚して大変申し訳ありません。 >>654
sum文がどこのセルにあるかわからないなら >>649 のコードだけど、表形式のデータでsum文があるセルが固まって存在するならその範囲のセルの値を調べて値が0ならその列を非表示というVBAにしたほうがシンプルかと。 あくまで想像だがこんなシート?
a,=sum(1+2)
b,=sum(3+4)
c,=sum(5+6)
abc,=sum(a+b+c)
a,=sum(2+3)
b,=sum(1+0)
c,=sum(0+0) ←この行を非表示
abc,=sum(a+b+c)
... >>651
ありがとうございます
すみません、インテリセンスではなくクイックヒントでした
MicrosoftのHPでそこは確認できているのですが、
クイックヒントとの相違についてが、調べきれませんでした >>658
表示の誤りはよくあるのであまり気にしない方がいいぞ
どうしても気になるならサンプルコード書いて動作確認すればいい
修正パッチや最新バージョン入れたら直ってるかもしれんし、しらんけど >>656
>>その範囲のセルの値を調べて
>>値が0ならその列を非表示というVBA
値を調べるVBAがあるのですね。ありがとうございます。 >>657
そんな感じです。ややこしい説明で申し訳ありません。
(表の並び方)
A・B・C・ABCの合計
A セル・セル・SUM関数(左のセルの数字を合わせた小計)
B セル・セル・SUM関数(左のセルの数字を合わせた小計)
C セル・セル・SUM関数(左のセルの数字を合わせた小計)
ABC SUM関数(AとBとCの合計)
Cの表を使わない場合、セルに数字を入力しませんので、
SUM関数のセルには「0」が表示されます。
「0が表示されているSUM関数のセル」を
選択し、列を非表示にするVBAを知りたいです。 >>661
If Range("C3").Value = 0 Then Rows(3).Hidden = True こんな低能にVBAを弄らせるなよ
後でトラブルが発生するのは確実だろ >>662
0を選択、非表示にする事ができました。
皆様本当にありがとうございます。
If Range("●●").Value = 0 Then
Columns("●●").Hidden = True
End If 素人がスレを汚して大変申し訳ありません。
今後はROM中心に参加させていただきます。 素人って??
ここにプロなんかいないよ。ましてや便所の落書き5ちゃんねるに。 >>659
そんなものなんですか
構文エラーなどで調べること多いんですが
エラー理由を知ると精巧に作られてるなと実感していたので意外でした
ありがとうございました 「あ6662」→「6662A」のように、頭に「あ」を含むセルは末尾に「A」をつけるようにするにはどうしたら良いですか? s=range("a1")
if left(s,1)="あ" then range("a1")=right(s,len(s)-1) & "A" この程度の頭の連中がマイナンバーシステムを作ったのだろうな >>673
あなたもデジタル庁の募集に応募すればよかったのにしなかったんでしょ? バイトで色んな仕事やった中にマクロ作成もあったけどプロ名乗っていい? If Left(Cells(1, 1), 1) = "あ" Then
Cells(1, 1) = Mid(Cells(1, 1), 2) & "A"
End If >>677
今もVBAで飯食べてるならプロを名乗っていいんじゃね? VBAでは職業プログラマは無理だろ
あくまで本業で楽するための道具のひとつ 「そこが知りたい!Excel VBAプロの技 Excel97/2000/2002/2003対応!」
という本が「幻の名書」てことで、
アマゾンでも中古で8,575円になってる。
”素人には見向きもされない難解な本”らしい。
https://thom.hateblo.jp/entry/2015/08/17/211757
調べてみると東京都稲城市立中央図書館にあるとのことで、
18きっぷで南多摩まで行ったわ。
(ちなみに南多摩は無人駅だから・・・・・)
開架なので、誰かが借りてなければ閲覧できる。
かなりマニアックなことが書いてあるのかと思えばそうでもかなったな・・・・。
無駄足だった。
ほほーって思った記事は、for-nextよりfor-eachのほうが早いってことかな。
興味があるやつは稲城に急げ。 転売屋がわざわざ図書館紹介するなんて
回りくどいことはしないかと。 今の365で出来ることまでVBAでしてた時代だろうしなぁ どうでもいいけど 3*0.3333..... ってやると
勝手に桁数直される時は1で直されん時は0.9999.... になるが見た目区別できない 先輩方に、VBAは自分を守るために使えと教わった。
決して他人のために使うなと。 他人に頼まれて作ったらずっと注文されるから止めとけと言われた こういうスレを見てるとわかるように馬鹿は厚かましくしつこく聞いてきて挙げ句の果ては作ってくれと言い始める そうですよね。というか、あの人ならなんでもやってくれる的な便利屋扱いされる可能性がありますわ。
で、文句言われて終わると。 部署で使うマクロくらいなら作ってメンテもやってる
操作感と使い勝手がわかるから作りやすい 相談にはにっても、やってというのは受けない方がいいと思う セル更新時等に裏でどのようにVBAが動いてるか調べる方法って無い? ブレークポイントで特定できた
ありがとう
なんかセル更新時に重いなって思ってたらユーザー定義関数を都度都度大量に再計算してた
揮発性無効にしても効果がないのでなんでかなと思ったらVLOOKUPの第2引数の範囲に入ってるのが原因
面倒だけどユーザー定義関数やめて普通の長ったらしい関数記述するしかないか…… 高速化のテクニックは無数にある
無駄な計算を実行しないとか、画面表示を止めるとか、同じ計算を1か所にまとめるとか と思ったらVBE開いてるときだけ重くなることが判明した
閉じれば普通に軽くなるから使う上では害はないか
なんか釈然としない 若い新人君がVBAマンやらされてて超可哀想
貴重な時間をそんなことで浪費して なんか仕事の愚痴吐く人目立つけど仕事で使ってる人ばっかなの?
ゲームのデータ管理やオカズの整理にしか使ってないのに質問したの申し訳なくなるな…… ええんやで
使いたくて使ってる人と、
使いたくない人に使ってる人じゃモチベが全然違う でも独学で手探りでやってる身としては仕事でやらせてもらえる人羨ましくも思うわ
書籍とか買うにも自腹だし誰も教えてくれる人も居ないし
何よりそれでお金貰えるの結構モチベになるんじゃない? >>711
ほれ、あれだ。
「仕事でやらせてもらえる」
というのは当然、「成果」を期待されているわけで。
あーでもない、こーでもないと言いながら、
こうはできないか、ああはできないかを自分の時間でする
てのが、一番楽しいのかも知れん。
「VBA研究職」なんてのは、世の中にはないし。 個人としてみれば、貴重な時間を割いて手伝ったところで他人の成果の向上につながるだけで見返り無し(どころか自分の業務を圧迫することも)
組織としてみれば、VBAで処理できる内容をスキル不足と協調性の無さから手作業でやられたりすれば非効率になる一方なわけで
大手なら教育体制やら個別技能評価あたりで全体を押し上げることもできるんだろうけど、中小零細じゃ厳しいよね
格差は広がる一方だね 大手でもそんなに制度がしっかりしてて綺麗に業務が分担してるとかじゃないよ
どこでも曖昧なもんよ
VBAで改善提案出して荒稼ぎしてる ワークシート関数で業務改善しました 上司の評価◯
VBAで業務改善しました=上司の評価 上司の評価=△ 担当者がいなくなったあとも後任が直せることが大事だからね プログラマはやれているから
VBA職人もやったら良いと思う 何回かいろいろな職場を渡り歩いたけど、VBA書ける人は数える位しかいなかったのが印象残ってる。 >>722
それはあなたの職場の利益はVBAがメインではないというだけの事 職場の中にVBAが書ける人が数えるくらいしかいないのか、大勢書けるのかはそういう職場ってだけで
それで利益が出ている会社(組織)であれば問題ないと思う 全く書けない人もいましたよ。ワークシートで使う関数で完結できるらしいから。 エンジニアというかプログラミングが本業で別言語が専門ならVBAにこだわる必要もないしな
というかBASICの派生言語は初心者向けと見做している節があるので必要が無いならあえて手を出そうとはしないだろ >>726
自分より劣っている人みてどう思う?
そうなりたくないと思うのか、一緒になって馬鹿やっていくつもりなの? 文法の違いなんて大した問題じゃないから、まともなプログラマなら未経験でもすぐ書けるようになる
たまたま今まで必要になってなかっただけ そりゃ必要無ければやらないだろ
別の選択肢があるのにわざわざVBA使う意味がない 今年度に入ってから、どうしても必要だったVBA&フォームをやっておいたから、Visual C#にもさほど抵抗なく入っていけたわ。 さすがに失礼でしょ。
自分より劣ってるとか一緒に馬鹿やってくとか、自分はそういった目で回りを見ないですから。 >>726
要は、それでその部署の業務効率がそれなりに上がっているのなら何の問題もないってこと
もしかするとあなたがVBAを使うことに拘っているだけで、そんな部署で周囲が不慣れなVBAを使う方が逆に非効率化につながったりするかもね
例えばただの会計部門があるとして、そこで発行する請求書の金額計算をVBAで即時計算するシートを作ったとして、これは本当に効率的なんだろうか?
そして他の社員から「消費税率変えたいんだけどやり方が分からないから書き直して」と言われたときに、「あー、これだからレベルの低い社員はー」とか嘆いた場合…
レベルが低いのはいったいどっちなんだろうか そもそも会計ソフトがない職場って…
ニートなのか? そういう会社たまに募集出てる。
手書きで帳簿締められる人って条件だったw chatgptでコード生成すると頼んでもいないのに余計な機能付けてくれるね🥹 それは頼み方が悪いだけ
普通は何回も続きを要求しないと最後まで書いてくれない 質問ですみません
とあるログイン画面で
IDとPWをsendkeysで入力して
オートログイン試みたのですが
PW欄は入力反映してID欄は空白の状態です。
試しに、かな入力モードにして実行すると
ID欄にかな入力で反映されますが、
変換(例:testだと「てst」になる)
されているためログインできません。
これはログインID欄側のセキュリティ等の
問題なのでしょうか?
IDとPWは半角英数字で、
事前にセルに入れてあるのをvalueで得て
sendkeysで送ってます
送信先をセルやWordにすると共に
入力されるのは確認できます。 メモ帳でsendkeysを使ったら、Windows 10とWindos 11とで
メモ帳が完全に立ち上がるまでの時間にわずかな差があるから、
Windows 11では発行が早すぎて何も起こらなかったことがある。 皆さま、ありがとうございます
最初早すぎだと思って
試しにIDで止めてみても
マウスポイントがチカっと光って(送られてる?)
何も反映されませんでした。
次にID欄に実行してるのを
PW欄だけで実行すると入力されたので
ID欄自体の問題かなと考えてます。
学校のedgeからIEモードで開いた
ログインサイトで
家のPCでは出来たのですが
学校配布のPCで実行するとダメでした。
夏休みの自由課題としてやっていたのですが
行き詰まってしまいました。 ブラウザの話ならそう言えよ
解決方法はしらんけどな
ieならActiveXからの操作で安定だろ Selenium使ってVBAでサイト開いてログインしたいって話でしょ
すぐわかったけど
エッヂのバージョンとウェブドライバーのバージョンが合ってないとかその辺か 最近chromedriverの更新が追い付かなくて対応するのが面倒だった。
webdriver-managerにして改善したけど遅いな Seleniumってセンドキーなんかつかわないかんの? Sendkeysが必要になるかどうかはwebサイトの作りによる
入力フォームなどにIdがちゃんと設定されてないと詰みがち >>738
DOMってわかる?
ウェブサイトってタイトルやフォームみたいなパーツで作られてるのは直感的にわかると思うんだけど、
それらは全部住所みたいなものを使って直接触ることができるのね。
そのDOMを使ってID欄やPW欄の入力されてる文字自体を変更し、
次に送信ボタンを触ってclickメソッドを実効するのが一般的な方法だと思う。
「スクレイピング ログイン vba」とかで検索すると簡単に出てきます。
sendkeyだとタイミングの問題の他、そもそも入力欄が選択されているのかの問題もあるから、
ゲームみたいなそもそも入力欄がないような場面でしか使わない。
タイミング問題はDOM操作にも発生するけど、
読み込みを待つための定番コードがあって比較的安全にアクセスできる。
こちらも「selenium 待つ vba」で検索すると出てきます。 >>749
Python自体はクラウド上で実行って
会社では使えないな 実際の実行はクラウド上で行うからだろ
インターフェースを追加しただけだ クラウドで金取るモデルは広まらないよ
そのうち有志の野良python環境に挿げ替わるんじゃね >>756
ならopenPyXlとかxlwingsとか使うだけじゃね 公開したくてたまらないって感じだけど
正直PCで未だに5ちゃんやってる人なんてほとんどいないからね… mateって便利なアプリがあることを教えてあげたい スマホからの この書き込み、mate。
デスクトップでは 以前『Live5ch』を使っていたが、Talk専用になってしまった。
他にも探したが、使いにくかった。
Excelのスクショ貼るには、デスクトップから。 PCからなら
JaneStyle 4.23の延命スレ参考に、ごにょごょしてとか、
ギコナビなら人柱版バタ72(1.72.0.866)とか
色々 5chはおじさんの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。 非モテをこじらせたまま老いるとこーなるのかぬ 参考になるぬ いつも気になってたから聞いてみるわ
何でお前みたいなヤバいやつって揃いも揃ってロボットみたいな口調なの? 職業訓練校通いの無職男性の年寄りがドヤ顔
こいつ例の零細企業勤めの爺だろ お前ら 勘違いしてるぞ! 俺のスペックを紹介するよ。
親父が 高卒の元公務員(警察官)で、
我が家は 世帯の金融資産が1億円を超える『富裕層』なんよ。
日本には富裕層が わずか2.7%しか居ない。
だから、生活のために働く必要なんてないんだわ。
しかし、無職の頃 モンハンにハマってたら 親父に殴られた。
仕方なく ラクなバイト(工場の守衛室)週2回 夜間だけ働いてるわ。
遺伝子のおかげで 格闘技は強いんだが、脳ミソまで筋肉やがな(笑)
プログラミングは『金持ちの道楽』
ExcelVBAは、おもに 株のデータ分析に活用してる。
お前らもスペック書いてよ! 職業訓練校は 去年の話や。
IT系コースで ExcelVBAとACCESSを習った。
授業のペースが早くて理解できず、ほとんど身に付かなかったわ。
グループワークで 20代後半の女性と話すのも新鮮だったわ。
就職の為ではなく 『失業手当の延長』が最大の目的だ。
去年は 失業手当の総額が 100万円を超えてた。
実は、職業訓練校に通ったのは 去年が4回目。 そんトキ付いていけてなくても あとでもらった資料を見返すと 案外すんなり理解が進んだりするぬ 職業訓練校の授業にもついていけなかった無職の子供部屋おじさんがいきりはじめました 訓練校の学習ペース速いんだよね。
初学者が躓くと挫折する。 このスレで職業訓練校というパワーワードが出るとは
もうVBA以前の問題でフォークリフトの技能講習とか取った方がいいんじゃねーの 世の中から認められてない、
必要とされてないコトは理解できてるんだな
かわいそうに (定年)退職したら ExcelVBAとACCESSコース受けるわ
寝てても理解できるし金もらえるとか美味しすぎる
(あ、前職バレるん?土方と言えばオケ?) そこで、Whisperと連携して、成り行きで全株式売り!
とかすればかっこいいのぅ 触らずにはいられない病
荒らしの相手する奴も荒らしとはよく言ったもので 職業訓練でVBAコースとかレアだと思う。
自分の地域はビジネスコースか医療事務か介護コースしかない l_i_t_e(邪魔という方は左記をNGお願いします)
更に家族にも教えて追加で¥4000をゲットできる!
https://i.imgur.com/JnCgXpC.jpg 荒らしが多すぎてほとんど機能してない
依頼が100あっても実際に削除されるのは数個 Excelスレ、マクロスレともにだんだん過疎ってきてるのはネタが尽きたからかな?
それともExcel自体オワコンだから? 最近5chの規制が厳しくなって、かなり書き込みがやりにくくなった
類似の掲示板がいくつもできて互いに潰し合いをしてて、人が分散した そうなんだ。道理で寂しくなった訳だ。一週間以上書き込みなしとかザラ LINE掲示板への誘導もかなりひどいことになってるし 月イチで書き込み規制食らう。もう5ちゃんは終わりかも。 今VBAの質問したい場合はどこに書くのがベスト?
qiitaは鼻で笑われそう
知恵袋が年齢層とマッチしてるかな copilotってVBEでも使えるの?
他言語だがVSCodeでは使ってる
あれ凄いよね、もはや上手いコメント書いたら殆どコーディングしてくれる
体験版終わったら脳死で課金した >>824
基本的なことがわからない探せないお前みたいな低次元の無能な人が重宝するだけ まぁちょっとでもコーディング楽したいからカネ払うってのはアリカモとわ思いましたケドぬ Redimって途中からの指定は無理なのか?
Redim Arry(1 to Ubound (Arry) , 5 to 10)みたいな感じにしたいんだが >>829
途中ってどういう意味だ?
Sub test()
Dim Arry()
ReDim Arry(5, 10)
ReDim Arry(1 To UBound(Arry), 5 To 10)
End Sub
とくにエラーはでないが? >>831
分かりにくくてすまん
Redim Arry(1 to Ubound (Arry) , 5 to 10)と書いてもエラーは出ないけど実際二次元側の配列に格納されるの1〜6の値になるってこと >>832
ますます意味がわからん
ReDimした段階で中身は空なんだが? 度々すいません
Sub test()
Dim Arry()
Arry = Sheet1.Range(“A1”).CurrentRegion.Value
Redim Arry(1 to Ubound (Arry) , 5 to 10)
End Sub
これで二次元側の値をArryの5〜10の値を格納したいけど1〜6の値がはいります
そもそも無理なんでしょうか? Preserve書き忘れてましたけど実際は書いてます >>836
何をやりたいのか書いた方がいいかも。
見た感じ、Redimの使い方を間違ってる、機能を誤解している印象。 Redimは配列の要素数を変更するもの。元々の添字が1〜10でRedimで5 to 10としたら要素数を6に変更し添字が5から始まるようになるだけ。 Preserveを使っているなら元の値の頭から変更後の要素数分だけ持ってくる。
てか、この後どう使っているか知らないけどRedimする必要ある?
配列から値を読み出す時に添字をいじればいいんじゃない?
c = 4 ‘今回の使い方だと-4?
d = arry(a, b + c) 素人質問で申し訳ありません。
VBAをコピーしつつ組んだのですが下記がエラーが出てしまいます。
ご教示いただけますと幸いです。
A行(A1:A100)をダブルクリックするとA行に1加算され、
B行(B1:B100)をダブルクリックすると、B行には年月日が、C行には時間が記載される。
D行(D1:D100)をダブルクリックすると、D行には時間が記載される。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then Target.Value = Target.Value + 1
If Not IsEmpty(Target) Then Exit Sub
If Intersect(Target, Range("B1:B100,D1:D100")) Is Nothing Then Exit Sub
If Target.Column = 2 Then
Target.Value = Date
Target.Offset(, 1).Value = Time
ElseIf Target.Column = 3 Then
Target.Value = Time
ElseIf Target.Column = 4 Then
Target.Value = Time
End If
Cancel = True
Cancel = True
End Sub どんなときにどんなエラーが出るか(どのコードでエラーがでるかなど)ぐらい書いたほうがいいんじゃね
素人でもそれぐらいはできるでしょ >>843
すみません。エラーが出るというより、A行とD行しか反応しません。 >>842
とりあえずこれで動くけど、何か説明が抜けてない?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("A1:A100,B1:B100,D1:D100")) Is Nothing Then Exit Sub
If Target.Column = 1 Then 'A列
Target.Value = Target.Value + 1
ElseIf Target.Column = 2 Then 'B列
Target.Value = Date
Target.Offset(, 1).Value = Time
ElseIf Target.Column = 4 Then 'D列
Target.Value = Time
End If
Cancel = True
End Sub >>845
ありがとうございます。
やってみます。
説明できる限りのことは書いたのですが
要領を得なかったら申し訳ありません。 >>846
自分の書いてる説明には
If Not IsEmpty(Target) Then Exit Sub
これに相当することが書かれてないけど必要なの?
これがあるとB列とD列は一度設定されると以降の処理が動作しないよね(未設定の時だけ設定される動作)
(そういう点では>>845のコードは説明に合わせたコード)
あと
ElseIf Target.Column = 3 Then
Target.Value = Time
これは自分の説明にはない動作だよね(「C列をダブルクリックしたら時間を設定」だけど実際にはIntersectの範囲に含まれないから動作しない) vbaを含むxlsmファイルのライセンスってどこに含めるのが一般的ですか? VBSとVBAは別物なのでまだ当面使えなくなることはないだろうけどそろそろ別の手段を考え始めた方が良さげな感じではある セキュリティリスクだからVBA使うなって会社もそろそろ増えてきてるだろうしな もう今はExcelとVBAではなくモダンExcelとPowerPlatformの時代 >>856
同じ理由ならpowershellも廃止すべきでは ACCESSの連結フォームのように、Excelのセルとフォームを簡単に連動させるテクニックはありますか? ACCESSの連結フォームのように、Excelのセルとフォームを簡単に連動させるテクニックはありますか? ACCESSの連結フォームのように、Excelのセルとフォームを簡単に連動させるテクニックはありますか? ACCESSの連結フォームのように、Excelのセルとフォームを簡単に連動させるテクニックはありますか? Excelのセルを使ってVBAソースを作る
似たような式をフィルでズズーと作ると気持ちいいぞ >>867
狙ったとこだけ変えるテクを教えてください Excelなのですが、複数セルに条件付き書式を一括で追加したいです。(条件は各行変化する)
FomulaとFormatConditions.addを組み合わせる様な事をしたいのですが、
実際やるとエラーで通りません。
例えば
FormatConditions.Add(2,3, '=A2TRUE')
と言った具合で、範囲で追加したときAの値A2,A3,A4と変化させたい感じです。
また別言語(Powershell)から呼び出しているのでWith構文は使えないと思います。
Forで回しても良いのですが、1000行近くあるので時間が結構かかる為避けたいです。 >>872
1000行なんてパソコンにとっては全然多くない
どうやろうが一瞬で終わる程度の量
そんな作業はどう考えてもForで回した方が速い VBA内なら1000行すぐ終わるかも知れませんが
Powershellから呼び出しだと結構時間かかります
試しにComObject作成して確認してみて下さい 最初の質問から24時間以上経過してるけど、その間にパソコンを動かしてたら遅い方法でもとっくに終わってたやろうなあ 実際のセルの処理は時間がかかる
描画を止めてから処理すれば多少早くなるから、
Application.ScreenUpdating=Falseしてから処理をはじめ、
終わったらApplication.ScreenUpdating=True
計算処理も同様に
Application.Calculation = xlCalculationManual
やってからはじめて、
Application.Calculation = xlCalculationAutomaticでおえる >>876
何度も使うつもりなら速いに越したことはないでしょ
一回切りなら尤もな話だけどさ 質問取り下げます
まともに回答するつもりの方いない様なので
書き込む前から雰囲気悪いなと思ったけどやっぱりか・・ 変化する条件を一括設定したい
これだけ聞いたら「もう少し考えたら?」の回答しか出ないよ >>879
与えられた条件で速くなりうる手段を考えて回答したのに、
まともな回答じゃないって判断されたんだね
考える時間もレスする時間も無駄にしたわ > VBA内なら1000行すぐ終わるかも知れませんが
> Powershellから呼び出しだと結構時間かかります
これよくわからない
時間がかかってるのはExcelの起動やらとかであって、Forの実行はVBA内で行われるんじゃないの? 取り下げたんだからもう良いんじゃねw
自分の恥ずかしいところとか見つかったんだろうよw >>883
> また別言語(Powershell)から呼び出しているのでWith構文は使えないと思います。
これもよくわからないし
Powershellって人がプロシージャに書いてある文章を一行ずつ読みにいって、自己解釈の元で自分で実行するみたいな発想だったのかね
ここまで意味不明な解釈してる人がどこで何に気がついたのか知らないけど>>879の捨て台詞は必要だったのかね
そして何よりもID:ewuxy2JXdが不憫で仕方がない これからこういう人多く成るんだよ? 高学歴が邪魔するのか何だか知らんけど
プライドだけは変な方向に高い 実務に即さない解決策を講じる 選択肢が間違ってても突っ走る ChatGPTでしらべたけどよくわからん、みたいな? 馬鹿が考える解決方法はそんなもの
馬鹿ほど己の間違え方法にこだわる やっている本人しかわからない可能性があることなんていくらでもあるだろう。 セルに○○と打ち込んだ
これを.Valueで取ったら"○○"
.Textで取ったら" ○○ "になった
その前後のスペースはどこから来たんじゃい? 馬鹿馬鹿って頻繁に書き込んでる人はよほど優秀なんだろうね。
Excelマクロ教室でも開けば良いのに。 >>894
標準か文字型
○○は漢字で、
Cells(1, 1).Text = "○○" がFalseで、
Cells(1, 1).Value = "○○" がTrueになったので、
んなわけあるか!と思ってDebug.Printしたら、
.Textには前後に変な空白があったのよ >>895
問題のセルがA1だったとして、A1の表示形式を"標準"にする。
(一旦別の表示形式にして"標準"にするのがよい)
その状態からF2で一旦入力状態にして、Enterで確定。
これで同じになれば値をどうやって入れたかを調べる。
同じ列の別の行で同じことが起こるか、などいろいろ。
動けばいいんだったら、違うことを前提にして回避策をいれればいい。 1セルだけ書式が会計になってたわ
>>891の言うとおりだった
すまん
しかし、なんで会計だと空白が付くのかという新たな疑問が >>899
セルや罫線の中で見やすくするためかしら?
桁区切り付き数値にしても、値の後に空白が入る。 Textはあくまで見た目のデータだからね
書式設定のウインドウでも位置がズレることが確認できるはず
何故かはしらん、マイナスとかついたときの位置を固定するためとかやろ 標準で入ってる書式にもスペース入ってるのあるはず(前はあったが…)
あれみた時、見えない爆弾仕込んでるな…と思った おそらく非表示の書式文字はアンダーバー+半角スペース1文字 会計を設定した場合に隙間が空くのは、次のような表示形式が行われるからです
_ \* #,##0_ ;_ \* -#,##0_ ;_ \* "-"_ ;_ @_
https://www.officepro.jp/exceltips/tips_format/index16.html
基本のキ いやそれが何故かっていう疑問なんじゃないの・・・
(言い換えれば空ける理由、空けなくてもいいんじゃない?っていう疑問だと思う)
答え出るかわからんし闇っぽいから、はい次の方 書式設定を変えた時、文字の位置が少し変わるのは知ってたけど、まさかそれを内部的には空白で表現してるとは思わなかったよ 【質問】
Excelのソートに関しての質問です。
①シートの1列目の文字列に基づいて昇順でソートする。
②シートの1列目の文字列の先頭に「○」や「☆」などの記号がある場合は、それらを無視して2文字目の文字に基づいてソートしたい。
そこで下記コードを実行したところ、
「実行時エラー '1004': 並べ替えの参照が正しくありません。」というエラーが出ます。
どこをどう修正すればよいでしょうか? Sub CustomSort()
Dim LastRow As Long
Dim SortRange As Range
Dim SortKeyRange As Range
Dim i As Long
With ActiveSheet
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set SortRange = .Range("A2:A" & LastRow)
Set SortKeyRange = .Range("B2:B" & LastRow)
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=SortRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SetRange SortRange
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With For i = 2 To LastRow
If Left(SortKeyRange(i, 1), 1) Like "[○☆]" Then
SortKeyRange(i, 1) = Mid(SortKeyRange(i, 1), 2, 1)
End If
Next i
With ActiveSheet
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=SortKeyRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SetRange SortRange
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With
For i = 2 To LastRow
If Left(SortKeyRange(i, 1), 1) Like "[○☆]" Then
SortKeyRange(i, 1) = "○" & SortKeyRange(i, 1)
End If
Next i
End Sub >>909
何もかも違ってる気がするので丸ごと作り直してみたけど、これで希望の結果になってるかはわからない
Sub CustomSort()
Dim LastRow As Long
Dim SortRange As Range
Dim SortKeyRange As Range
Dim i As Long
With ActiveWorkbook.ActiveSheet
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set SortRange = .Range("A2:B" & LastRow)
Set SortKeyRange = .Range("B2:B" & LastRow)
.Range("A2:A" & LastRow).Copy Destination:=SortKeyRange
For i = 2 To LastRow
If Left(.Cells(i, 1), 1) Like "[〇☆]" Then
.Cells(i, 2) = Mid(.Cells(i, 1), 2, 1)
End If
Next i
With .Sort
.SortFields.Clear
.SortFields.Add2 Key:=SortKeyRange
.SetRange SortRange
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub >>912
ありがとうございます。
ただ、そのコードを実行してみたら、ちょっとセルの中身がずれたりしていたので、色々試した結果、下記のコードで解決しました。
Sub CustomSortWithSymbol()
Dim LastRow As Long
Dim ws As Worksheet
Dim i As Long, j As Long, k As Long
Dim sortKey As String
Dim originalValue As String
Set ws = ThisWorkbook.ActiveSheet ' アクティブなシートを設定
LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 最後の行を取得
Dim sortKeys() As String ' カスタムソートのため、ソートキーを一時的に保持
ReDim sortKeys(1 To LastRow)
For i = 2 To LastRow ' ○や☆の文字で始まる文字列の場合、次の3文字をソートキーとして設定
originalValue = ws.Cells(i, 1).Value
If Left(originalValue, 1) = "○" Or Left(originalValue, 1) = "☆" Then
sortKeys(i) = UCase(Mid(originalValue, 2, 3))
Else
sortKeys(i) = UCase(Left(originalValue, 3))
End If
Next i For i = 2 To LastRow ' ソートキーを使ってソート順を決定
For j = i + 1 To LastRow
If sortKeys(i) > sortKeys(j) Then
Dim tempKey As String ' ソートキーの順序を入れ替え
tempKey = sortKeys(i)
sortKeys(i) = sortKeys(j)
sortKeys(j) = tempKey
Dim tempValue As String ' A列のセルの値も入れ替え
tempValue = ws.Cells(i, 1).Value
ws.Cells(i, 1).Value = ws.Cells(j, 1).Value
ws.Cells(j, 1).Value = tempValue
For k = 2 To 10 ' B列~J列のセルの値も入れ替え
tempValue = ws.Cells(i, k).Value
ws.Cells(i, k).Value = ws.Cells(j, k).Value
ws.Cells(j, k).Value = tempValue
Next k
End If
Next j
Next i
End Sub VBAでスクレイピングをしてるんだが
これはOK
Set o_elem = Driver.FindElementsByCss("ul.M_pager > li[class = 'next'] > a")
これはOK
Set o_elem = Driver.FindElementsByCss("ul.M_pager > li[class *= 'next'] > a")
これはエラーになる
Set o_elem = Driver.FindElementsByCss("ul.M_pager > li[class != 'next'] > a")
VBAのFindElementsByCssで!=を使う方法てある?
もちろん<>もだめ。 ソレってVBAではなくDriverさんの文法ですよね? コレでどーなるか ちょっと試してみてもらえるかぬ
Set o_elem = Driver.FindElementsByCss(“ul.M_pager > li:not([class = ‘next’]) > a”) >>921
THX
それだとエラーはなくなるけど
<li class=next><a>も選ばれてしまう。
.
ul.M_pager > li:not([class]) > a
だとうまくいきました デスクトップに保存したhtmlファイルを、Shell ("エッジのパス\msedge.exe" & path, vbNormalFocus)で開いています。
んで、そのhtmlファイルには複数個のリンクがあります。
各リンクを自動的にonClick()でクリックするにはどのようにすればいいでしょうか? 知らんが、onclickするより、
そのhtmlをテキストで読み込んで、
アドレス調べて直接開いた方がはやい >>924
イベントハンドラ(onClick)を自動的にクリックとか表現してるあたり、なんか基本がわかってなさそうなふいんきだけど、大丈夫?
Edgeに限らず、Shellで開いたアプリをクリックするのは不可能じゃないけどかなり大変
APIを使わないと無理なんだけど、Shell以外の方法で開くのはだめなの? そういうのは、Ruby, Selenium WebDriver で出来そう アクティブブックを保存してBluetoothでファイル転送。の方法をお教えいただきたくお願いいたします。
上記についてはウェブサイトでも見つかりませんでした。今は手段をメール添付にして似た動作で行っていますが、ローカルPCでも自動ファイル転送するケースがでてきたため、Bluetooth転送方法をお願いいたします。 転送したいファイルを右クリックして 送る で BTデバイスを選択するダケと思いましたケドぬ >>931
BT通信の自動化はかなりめんどい
専門家に開発費を払って作ってもらうレベル
自分でやりたいなら、ここを参考にして
https://www.softech.co.jp/mm_170705_tr.htm Microsoft 365 Excel バージョン2310 ビルド 16924.20124だけど、
name no
a 1
b 2
c 3
みたいなテーブル1を作ってワークシート上で
XLOOKUP("a",テーブル1[name],テーブル1[no],"")
ってやると当然1が帰るけど、
vbaで
With ThisWorkbook.Sheets(1).ListObjects("テーブル1").DataBodyRange
MsgBox Application.WorksheetFunction.XLookup("a", .Range("テーブル1[name]"), .Range("テーブル1[no]"), "")
End With
みたいにするとaだけ帰ってこない b以降はOK これは何でしょ? With ThisWorkbook.Sheets(1).ListObjects("テーブル1").DataBodyRange
MsgBox Application.WorksheetFunction.XLookup("a", .Range("テーブル1[name]A1:A3"), .Range("テーブル1[no]"), "")
End With
こんなカンジで試してみてどーかぬ >>934
そのコードで本当に動いた? エラーになるけど。
そのWithの指定だとテーブルの中身だけ持ってくるから .Range("テーブル1[name]") で参照出来ないと思う。 >>935
ありがと あとで試してみる
>>936
動いてるコードそのまま貼ったつもりなんだけど…動かなかったらすまん 商社から上司経由でシステムの売り込みとかよく来るしpython勉強すればもっと広い範囲で出来たりするんだろうけど
vbaで何とかしようと考えちゃう悪癖が無くならない
42歳だけど化石人種のまま定年になるんかなぁ 得意なツールでなんとかするのわ ワルくわネエと思いますケドぬ ではN88BASICとフロッピーでなんとかします! With ThisWorkbook.Sheets(1).ListObjects("テーブル1")
MsgBox Application.WorksheetFunction.XLookup("a", .ListColumns("name").Range, .ListColumns("no").Range, "")
End With
結局これでうまくいった おまえらありがとう ChatGPTのcursorとエクセルを連動することって出来ますかね?
cursorで作成したVBAコードをVBEに貼り付けて実行ではなく、
cursor内から直で実行したいです。 cursor ってpythonなので python でエクセルを呼んでやれば可能と思いますケドぬ ありがとうございます。
やっぱり難しいですよね。
そもそもVSCodeとVBAの相性もいまいちなことに気づきました。 コピー元.Copy : コピー先.Paste
はクリップボード経由なので遅いと聞きましたが
コピー元.Copy Destination:=コピー先
はクリップボード経由でしょうか? ChatGPTの回答を貼ってくれるのでも良いです。 出先とかでVBA動かせない環境かもよ
copyメソッド=クリップボードにコピー フォームボタンから引数付きマクロ呼び出すとエラー出たり再度ブック開くときに壊れるね
これ改善されないのかな それだけだと何とも
壊れるのが普通なら、壊したことないオレが優秀なのか
(RPAでXLファイル更新させたら木っ端微塵にされた経験はある) された んじゃなくて 木っ端微塵にするロードマップを書いたんだろ 参考までに載せとけ >>953
開発元に連絡して不具合であることを確認済み
お前のようなアホではない
テストですぐわかるからイチイチ書かん ほほう、「RPA 不具合」でググると散々だな けちょんけちょんに貶されてる まだ時期尚早てか
アホでは無いひとはスイスイそれらのトラブルを回避し続けてるということか さすがです
クラウドもオンプレもどっちもロクな事書かれてない 実務で導入・運用はこええじゃん 潔いな まあそこは色々な言い方があるだろうな
全銀がトラブルくらいなら各銀行は信用ならんと言う人もいるだろう
相変わらずリコール出してる車ってものは信用ならんと言う人もいるだろう
30年前は事務のおばちゃんは殆どがPCなんて使ってなかっただろう。今はEXCEL詳しいおばちゃんもいる
30年後にはAIは様々な形で普通に使われているだろう
RPAはその一部かもわからないが、実績を上げてる事例は既に多い
現場のおばちゃんが使い出したとこもある
システム開発に多額な費用出せない中小企業には救いなソリューションかもしれない RPAでできることはほとんどVBAでできるしね。
RPAを導入するやつはアホとしか言えん。 >>958
RPA知らないバカですって言ってるようなもん ロジック部分や外部連携はRPA、セルの修飾などExcel固有の処理をVBAで処理するのが本来の姿 いやRPAは自動化システム全体を指すし、
それの実装方法の一つとしてVBAやらPythonやらベンダーのソフトやらがある
ノーコードだって一人情シスがシコシコVBA組んだって、
それで作業自動化ができればそれはRPA
VBAだとoffice以外の自動化がしにくかったのは昔の話だし 言い出しっぺが、RPAでXLファイル更新させたら って書いてんだから、VBAじゃあ無いんだろう
RPAってなんぞ? と少しく調べてみたら、何のことは無い 自動化を言い換えただけ
MS謹製のもあるし日立とかのもあったりする様子だけど、古来そおゆうのが蔓延った試しが無い
云わば吊るしのスーツに体を合わせろの姿勢 個々の企業の千差万別の業務に特化したオーダーメードには
やっぱりVBAで対応するのが何より
その先の他業務との連携に関してはRPAがございます どうぞよろしく な立ち位置なのか
特にクラウド系の、外部に居てもアクセスできます 部外者へのお披露目関連はこの鯖つこてください
とかなら、ネットに疎いみなさんでも容易に使えて都合がいいのかも知れない
ただ、自動化の困るところは、いざトラブった時の原因の切り分けが必要以上に厄介に成るところ
一人情シスの手に負えるところじゃ無くなる 要員増やさなきゃ仕事に支障が出る 若しくは外注
中小零細はVBAでいいんだ >>962
逆
一人情シスじゃないとブラックボックス化してゴミ化する 一人情シスをボロボロになるまで使い倒す気マンマンでワロタ
本人がやる気満々のうちはいいだろうが、寿命縮むぞ そう長期に亘って携わっていられる業務じゃ無くね?
何よりどんどん投入されるこういった新しい技術も知的財産として蓄えてかなきゃならない
それが実務に応用できるかの検証が必要 デバイスもコロコロ変わる 相互の親和性とかもチェックし続け
そおゆうのをひとりっきりに任せっぱなしだと、後継者がいざ現場に就いた時に玉手箱明けたウラシマ状態
「なんじゃこりゃあ!」と必ず叫びたくなる 情報共有の重要性を切実に訴えたい
そういうトコを切り詰める企業は先細り
いや、経営陣はそんなの知ったこっちゃ無い「お金掛けてるのになんでできないの?」「失敗したら責任な」
そんなのが大半だから、ボトムアップで訴えを上げ続けないと って、スレチだな ついな >>964
RPAがオワコン呼ばわりされてるのは、
結局やってることが草の根VBAと同じだからよ
RPAそのものより、その運用ノウハウの方が高く売れる
述べてる情報共有方法だったり、業務フローの資料化だったりね >>964
単に一人情シス イヤになれば 辞めたらイイと思いますぬ オワコンとは思わんが
MSが推進しようとしている、総合型コラボレーションプラットフォーム Teams だの Azure だの
それぞれ単品で試してウケが良かったら一つにまとめて行って高値付けて一儲けしよう という方向性がね
尻馬に乗っかろうって他社も同様 万単位で開発者が居るような統合アプリを、一人情シスでは捌ききれん
中小零細がそれをどれだけ導入するかにも依るが いずれは避けて通れなく成ってくんだろうとは思う
「親会社の要請で」だの「導入してないと仕事も貰えない」だの
ノウハウ売るだけでサポートなんかしません っつー商売はいいトコに目を付けたと思う 精々お励みください 仕事楽にするのは別にVBAだけじゃなくても構わんてだけのことよ
VBAに拘るのはアホってだけ MicrosoftのRPAというならAzureはちょっと路線が違う
PowerPlatformの方が方向性が近い VBAは属人化しやすいのがネックだね
Excel使えるけどVBA使えない人9割とか言われてるし >>971 ありがとう 見てきた ほんの2日前に初めて意識したRPAだが(w ずっとシステムとかに
携わってきた人間なら辛うじて付いて行けるだろうけど、一般の事務職や、まして中小零細の経営陣が
これに付いて来れるとは到底思えんな 上場の大企業サマ達がすったもんだし続けていて欲しい
そこで熟されたのが末端に徐々に浸透してくならまだしも という感想
末端の実務でも「おおおっ!!」と感嘆符付けるような具体例があるなら加速するのか
PowerAutomate なんてのもそんなに普及してるとは知りもしなかったし、ために成るスレだ
(導入するかどうかは別として >>973
個人でも使ってますよ
(対象になるようなことしてない人はもちろん不要) Office ( Excel / Word / PowerPoint )
PowerPlatform ( PowerAutomate / PowerApps / PowerBI )
https://i.imgur.com/WGgOkUt.png >>976
会社でVBAを使える人はその能力を隠す傾向にある。
VBAの使い手だといろんな仕事を押し付けられる可能性がある。
そしてそれは大概人事の評価にはならない。
会社もそういう人をIT担当にするわけでもなく、
大概IT担当は使えないやつがあてがわれる。 素性を隠してるのに統計に計上できるって、どんな徳川の隠密が暗躍してンだよ そも得られた調査が正確だとゆー保証わ ドコにもネエからぬ じゃあ、九割だなんてでたらめな数字持ち出して悦に入ってる奴が唐変木ってぇことか
数字を扱う業務に携わって居ながら不埒千万だな マクロ組めるのに、そのスキルをアピールしない。能ある鷹は爪を隠すだね まるで、ペーパードライバー 能力を持っていながら才能を発揮して無きゃ
いざ!の時に錆び付いてて使い物に成らない 過去の遺物を触れるってだけ
そんなのを能ある鷹とは呼べず、No!だけのタコと呼んでもいい えー、鷹に対応する何か他のもの探したけど出て来なかったからタコにしただけなのにー ゆとり教育で漢字書くのはそれほど重視されなくなった
オレはとっくに重視してなくて、書けない漢字山ほどあるわw >>993
漢字の話ですらないことも読み取れない脳足りんのお前
それが何を重視するとかすこぶるどうでもよい 能ある鷹 vs No! だけの鳶 ソッチのが変だろ そんな説明しなきゃいけない時代か やれやれ これは「たか」と「たこ」の高度なダジャレなんですよ ダジャレかな ダジャレじゃ無いよラップだよ
のーあるたか!のーだけのたこ! のーあるたか!のーだけのたこ! のーあるたか!のーだけのたこ!
三回唱えりゃよっくわっかる 頭韻踏んでるラップだよ! なんつて どーもすみませんでした ラップってつまるところおやじギャグの繰り返しじゃん このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 303日 9時間 51分 35秒 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login レス数が1000を超えています。これ以上書き込みはできません。