Excel VBA 質問スレ Part68
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付ける ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part67 https://mevius.5ch.net/test/read.cgi/tech/1593104489/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured Windowsの標準のユーザーインターフェイスを意識しないと、使いやすいと思ったものが結局つかいにくくなる。 フォーカスがあたってなくても計測値が取れるように作るという発想が無いのが厳しい。 そんなこと出来ないなら根本から違うユーザーインターフェイスを採用すべき。 こういう処理でユーザーに何かさせる必要は無い筈。 初心者がツール作るように言われたら大変なんだろうな、俺は大変だと思ったことないが タブレットでバーコードリーダーのキーボード入力モードでも使ってるんだろうなと想像 COMで操作できるライブラぐらい付いているだろうからそれ使えば解決 >>435 まさにおっしゃる通りで作業進捗をバーコードで管理するものを作りました。 次は工程内のチェックシートと計測値などのトレーサビリティです禿げそう とりあえず計測器具も試用で借りてる段階なのでメーカーにライブラリの事聞いてみます… 罫線で囲われてたり、色塗りされたりするセルをマウスでドラッグ移動した時移動した場所は何もなくるなるのを罫線のみを残す方法ってありませんか? 簡単に言うと罫線で作った表の形式を保持したい。 >>439 テンプレートを隠しシートに保存しておいて、 ボタン押下で書式をコピペしてくるってどう? >>439 切り貼りじゃなくてコピーアンドペーストした後に元のところの数式と値をクリア(右クリック+N)すればよいのでは changeイベントで常に罫線引くことしか思いつかん セルをマウスでドラッグって何だよ? エクセルで将棋でもやるの? >>425 それExcel VBAでやるものではない。 自分のやりたいようにやりたければ、Windows SDKでの開発をしてください。 >>439 そもそも手順というものを考えた方がいい。 移動する前の情報を移動先には持ってくるが、移動元にはその情報を適用しないのはなぜ? 指定したフォルダ内の全てのCVSファイルを配列に追記していき対のですが、コードを教えてください 配列の0列目(1次元目)にはそれぞれのCSVファイルのファイル名をいれたいです。 Sub Sptyou() Dim FolderPath As String, buf As String, TargetDate As String '■フォルダを指定する With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then MsgBox "キャンセルされました。" Exit Sub End If FolderPath = .SelectedItems(1) End With '■指定されたフォルダ内の全てのCSVファイルを開いて、そのファイルA列からGH列を配列に入れていく ReDim BiforeArraybar(1, 190) As Variant つづき buf = Dir(FolderPath & "*.csv") Do While buf <> "" Open buf For Input As #1 'インプットモードでファイルを開く Line Input #1, TargetDate Do Until EOF(1) 'ファイルの終点まで Line Input #1, Tardt '開いたファイルを上から順に読み込んでいき、変数TargetDateに代入していく If Split(TargetDate, ",")(1) = "" Then Exit Do '配列に追記する ReDim Preserve BiforeArray(Ubound(BiforeArray) + 1 To ??, 1 To 190) = Sprit(TargetDate,",") Loop Close #1 buf = Dir() Loop End Sub ReDim Preserveで操作可能なのは最右端の次元だけだから2次元配列で1次元目に使いたいなら一旦反転させた状態で操作して出力時にWorksheetfunction.transpose使って吐き出す必要があるぞ いまいち最終目的が分からなかったから取り合えず読んでて気になった所だけ Linux のcat なら、複数のファイルを連結できるけど >>448 内側のLoop内で Tardt ってのが気になった >>449 右端にファイル名を入れるにはどうしたらいいですか? それと、配列のUpperをどう設定したらいいですか? また馬鹿な質問者か。それともいつもの厚かましい馬鹿か? 右端の次元と右端の列では話の次元が違うけどわざとやってんのかなー? excelなんだからとりあえずシートに格納すればいいと思うんだけどなー 配列に1行づつ追加するよりはやいんじゃね? VBは動的配列無いんだからパフォーマンス出すには頭を使わにゃいかんよ 行数をキーにしたDictionaryもいいかもね >>453 配列のUpperが何を意味してるのかいまいち分からんがこんな感じで良いんか? Line Input #1, TargetDate BeforeArray(0, Ubound(BeforeArray, 2)) = ファイル名 For文[1〜190](BeforeArrayにSplit(TargetDate, ″,″)を放り込む) ReDim Preserve BeforeArray(0 to 190, Ubound(BeforeArray, 2)+1) Do Until EOF(1) Line Input #1, TargetDate For文[1〜190](BeforeArrayにSplit(TargetDate, ″,″)を放り込む) ReDim Preserve BeforeArray(0 to 190, Ubound(BeforeArray, 2)+1) Loop >>453 こういうことじゃないのか targetdata = buf & "," & targetdata >>455 サイドブレーキを使う坂道発進をダサイと感じるようなもので、 どう考えてもシート格納が合理的なのに、無理して配列を使うわけですよ。 CSV の規格では、各要素をクォート文字で囲めば、 各要素中に、列区切り文字も入れられる "a,b", x Ruby などのCSVライブラリを使わず、 自力で、列区切り文字で分割すると、バグるだけ CSVの規格を知らない香具師が、よくやってる ExcelでCSVをダブルクリックで開いて編集、上書きして事故る人が多いね >>460 一応あるけど結局Excelで読めないとダメって言うケースが大多数だったりする http://www.kasai.fm/wiki/rfc4180jp そのRFCって、たくさんあるローカルルールの1つを紹介してるだけだよな 強制力もなさそうだし、現時点ではあんまり意味がなさそう >>459 マイクロソフトの製品はそれに沿っているものがあるが、クォーテーションがついたり、つかなかったりするのは、人間にとってもタチが悪く、完全に失敗した仕様と結論が出ている。 列区切り文字は、必要なければ省略できる つまり、x も、"x" も同じ。 全ての要素に、付けてもよい ただし、"a,b" みたいに要素内に、 行区切り文字・列区切り文字・クォート文字を含む場合は、省略できない >>465 修正 >列区切り文字は、必要なければ省略できる クォート文字は、必要なければ省略できる まあそもそも多数の実装が出てからそれ集めて決めた仕様だからな そういやあれ何だろうな。 QueryTableだとセル内改行でずれるのに、 ADOだとずれないとか。 配列を戻す自作関数を呼び出し先Subから複数回実行して、配列を結合したい んだけど、どうすればできますか? redim preserveとUBoundを使うのかも しれないけど、いい感じにまとまったコードが書けない。 例えば、下の関数を、別のSubから2回実行させて、 「Ary(3) ※中身:path1,path2,path1,path2」 の結果を得たいです。 Function TestFunc() Dim testPath(1) testPath(0) = "path1" testPath(1) = "path2" 'return TestFunc = testPath End Function 配列を戻す自作関数を呼び出し先Subから複数回実行して、配列を結合したい んだけど、どうすればできますか? redim preserveとUBoundを使うのかも しれないけど、いい感じにまとまったコードが書けない。 例えば、下の関数を、別のSubから2回実行させて、 「Ary(3) ※中身:path1,path2,path1,path2」 の結果を得たいです。 Function TestFunc() Dim testPath(1) testPath(0) = "path1" testPath(1) = "path2" 'return TestFunc = testPath End Function >>471 例えとかいい感じとかじゃなくて正確にコードを提示してどの部分をどうしたいのか明確に説明した方がいいよ VBAからIEを操作して、タグを指定して.valueやselctedで自動化しているのですが、ヤフオクの商品説明だけどうしても値の挿入ができません。 Tabや近い要素をフォーカスしたりクリックし、SendkeyなどでShift +Tabからエンダーなど試していますが、一向に解決できません。 直接でか無くてもカーソルが点滅させれれば、クリップボード経由で貼り付けるような仕様にしようと考えています。 漏れは、Ruby, Selenium Webdriver で、ブラウザを自動操作して、 send_key で、ユーザー名・パスワードを自動入力して、ヤフーにログインしてる require "selenium-webdriver" options = Selenium::WebDriver::Chrome::Options.new options.add_option( :detach, true ) # ブラウザを切り離す options.add_argument( '--start-maximized' ) # 画面最大 driver = Selenium::WebDriver.for :chrome, options: options driver.manage.timeouts.implicit_wait = 10 # default timeout driver.navigate.to "https://login.yahoo.co.jp/config/login_verify2?.src=ym" ; element = driver.find_element(:id => "username") element.send_key "ユーザー名" driver.find_element(:id => "btnNext").click element = driver.find_element(:id => "passwd") element.send_key "パスワード" driver.find_element(:id => "btnSubmit").click そもそも、IE なんか動くのか? 漏れは、Chrome >>475 すみません。 Sub test Dim i,ary() For i = 1 to 2 ary = TestFunc ※ary配列の要素の最後に呼び出した配列を追加していきたい Next End 配列に配列を追加するのを初心者がつくるなら 追加する2つの配列と結果を格納する配列の計3つを用意して順番に格納すればできないかな? >>471 redim preserveとUBoundを使うのかも まあしかし、その処理ほんとに配列でやるのが良いのか検討したほうが良いんだが VBAコレクション系弱いからなぁ >>488 押すだけならワンキーだけど、オンラインヘルプはそこからが長い 下記のように特定の文字を削除して、改行をやめて1行文にしたいのですがコードのご教示いただけないでしょうか やんやんつけ棒§ めちゃ美味い ポテトチップス§ めちゃ美味い ↓ やんやんつけ棒めちゃ美味い ポテトチップスめちゃ美味い まともなテキストエディタ(VSCodeとかサクラエディタとか)で開いて正規表現置換で§¥r¥を空に置換すればよい >>492 なるほど…めちゃ助かります。ありがとうございます。 申し訳ありません、もう一点 A1:私は実は理学部出身 A2:の元々は地質学者です A3: A4:こうした南鳥島で A5: A6:レアアースの濃集が A7:起こる A8: A9:というのは A10: A11:特徴的な層準に ↓ A1:私は実は理学部出身 の元々は地質学者です A2:こうした南鳥島で A3:レアアースの濃集が 起こる A4:というのは A5:特徴的な層準に 下の行に文字列 → 2行の文章として、改行を入れてExcelの1マスにまとめる 下の行が空白 → 1行の文書なのでそのまま これをなんとかVBAで自動化したいのですが記述を教示願えますでしょうか 面白くない質問ですみません… >>497 その条件2つそのままコードに直していけるよ 改行がLfなのかCrなのかCrLfなのか知らんが Replace("改行入りの文字列", vbLf, "") 普通に書けばできることを聞く意味が分からん もしかして書けないの? 書けないならやめればいいのに >>498 >>499 ありがとうございますm(__)m >>497 VBAに慣れている人なら簡単に自動化というかVBAで組める内容ではある 問題はこの程度の内容を質問するより先に、自力でできるとこまで自分で やらなかった最初の一歩が間違っているんだと思う CSVとして保存 VSCode等のまともなエディタで開く ([^¥r]+)¥r¥n([^¥r]+)を”$1¥r¥n$2”に置換 ¥r¥n¥r¥nを¥r¥nに置換 Excelにインポート >>492 同様にワンショットでいいならこんな感じでいけるんじゃね クレクレ君のより煽ってる奴のがうざいんだけどね VBAだけが人並にできるからこのスレにいつも欠かさず覗きにきてる感じか? いつものお前が邪魔ですよお >>508 大丈夫スルーしてるから 遠まわしでも構うと同列に >>507 できないことは問題じゃない やろうとしないことが問題 たしかにやろうとしないことが問題 てのは御指摘のとおりですね。すみません。 映像制作を生業としてますが普段tipsを聞くのりで聞いてしまいました。 >>512 5chなんて便所の落書きなんだからそれでいいと思う。 ただ、まともな返事を期待して馬鹿を見ても仕方ない場所でもあるけれど。 ただでさえ印象悪いのにどうでもいい言い訳まで付けてさらに印象悪くするよくあるパターン Dim dw As Date Dim i As Integer Sub test() 'ランダムに並び替える Randomize '乱数を入れる For i = 1 To 200 Cells(i, 2) = Rnd() Next i '乱数で昇順並び替え Range("A1:B200").Sort _ Key1:=Range("B1"), Order1:=xlAscending, _ Header:=xlNo, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin '乱数を削除 Range("B1:B200").Clear dw = DateAdd("S", 5, Now) Application.OnTime dw, "test" End Sub >>515 のdw = DateAdd("S", 5, Now) Application.OnTime dw, "test" を入れると、 「実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。」 となってしまいます。 「マクロのセキュリティ」は「すべて有効」にしています。 どうすればいいでしょうか >>516 そのプロシジャを標準モジュールに書く CellsとかRangeとか、ちゃんとシート指定しといたほうが良いぞ >>517 できました! >CellsとかRangeとか、ちゃんとシート指定しといたほうが良いぞ わかりました ありがとうございました。 1,1,2,2,3,4,4,4,5,6 を 1-1,1-2,2-1,2-2,3,4-1,4-2,4-3,5,6 に変換したいのですが、どういうコード書けばよいのでしょうか? 連想配列使ってカウントするか(0 to 対象の値のMax)の配列を用意して、Array(対象の値)にカウントするかが1番頭使わなくて済むかな? かなり前だけどこのスレで教わったアドバイスが今やってることでピンときた タブ増やして進めてくより userformをhideとshowで工程進めてくみたいにしたほうがいいわ ありがとうかなり前に教えてくれた人! >>519 fori=1 to 要素数(※要素数はカンマで区切られた数) 数字=数字 & “-” & i next i みたいな感じで 前の数字と違ったら数字をリセット (iが1ならこの処理はしない) 要素がひとつなら処理せず次のiに かなり前の話と言えば 昔Privateで書かれたプロパティを 外部から取得する方法を書いてた人がいたけど あれどうやるんだったっけ >>523 それ以前にまったく要望を満たしていない >>519 どうしたいのかもう少し言葉で説明してくれる? >>519 普通にカウントアップして、1から2に、2から3に上がるときにカウンターリセット。 1つしかなかった時に連番を付けない処理が一手間多くて面倒 データの先読みが必要になる 1個でも複数でも変わらない おかしな考え方してるんだろう ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる