1 名前:デフォルトの名無しさん [2017/11/08(水) 11:26:30.13 ID:+KUB1/9hd.net] スレ立ての際は一行目に !extend:checked:vvvvv:1000:512 と入れてスレ立てして下さい ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※関連スレ VBAなんでも質問スレ Part2 mevius.2ch.net/test/read.cgi/tech/1432173164/ Access VBA 質問スレ Part1 mevius.2ch.net/test/read.cgi/tech/1328536426/ Excel総合相談所 126 https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/ ※前スレ Excel VBA 質問スレ Part50 mevius.2ch.net/test/read.cgi/tech/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
757 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 06:55:25.36 ID:cWcYrW8d0.net] >>734 そのマシンに新規ユーザーつくって現象が発生する? テンポラリやら消したら直るかもしれん あとセキュリティ対策ソフト切って試すとか
758 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 06:58:32.09 ID:gkP6o6Ks0.net] >>719 「01月」というファイル名のコピーが、「02月」として、同じフォルダに入れるのか フォルダ内に、「01月」「02月」があるとして、 この状態で、もう一度、同じ事をするなよ!w 設計として、同じフォルダに入れるのはおかしい。 異なるフォルダに入れるべき わかりやすいように投稿する時は、名前欄に、717 と入れてくれ
759 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 07:54:39.17 ID:6qOsufVw0.net] >>735 >>736 732です、レスありがとうございます。 最悪、officeの再インストールも覚悟しています。 レジストリかも?とはITには言われましたが・・・・ 新規ユーザーはまだ試していません。 セキュリティ対策ソフトはITの管轄なので、切れるかどうか不明ですが 聞いてみます。 こちらの書き込みは自宅からなので、次のレスが遅くなるかもしれません。 よろしくお願いします。
760 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 08:20:51.65 ID:upqov7ALa.net] >>737 運用の話までは管轄外じゃね あとは自分で考えりゃいいよ
761 名前:デフォルトの名無しさん [2017/12/27(水) 09:27:07.83 ID:58xyBvha0.net] >>721 とか>>732 とかのコードで意味わかんないところがいくつかある (コードが間違ってるって意味じゃなくて、こっちの知識が足りなくて理解が追い付かないって意味です) まず>>721 は なんでコレクションを宣言してるのか? しかもなぜ宣言したのに使わないのか? 変数eは何のために使ってるのか? ファイルのパスをsplitで分割してるけど、 ファイル名だったらinstrrevで\を探したほうが話が早いんじゃないか? 等々 >>732 は ループの中でdim使うのは大丈夫なの? 複数回宣言したらエラーになりそう 後、一番知りたいのが If strFolder <> "." And strFolder <> ".." Then これ、どういう意味なのか解説をお願いしたい (書いてる人たちにケチつけてるんじゃなくて、本当に分らない事を教えて欲しいだけです) どなたか教えてください、よろしくお願いします
762 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 09:45:06.41 ID:fOQst04i0.net] >>740 コマンドプロンプトで cd .. って打ってみたら判る c:>test>test1> cd .. 親ディレクトリに移動する。つまり親フォルダの事 「.」 は「.」 カレントフォルダの事
763 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 10:22:00.13 ID:fOQst04i0.net] 寝ぼけて書いてたからめちゃくちゃだな^^; c:\test\test1> というフォルダがあったとしてそこで c:\test\test1>cd .. と打てば c:\test> と親ディレクトリ(フォルダ)に移動する
764 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 10:45:52.46 ID:90Vjgj1Fa.net] >>740 ループ内でDimしてもエラーにはならないよ その都度メモリが割り当てられるだけじゃないかな フォルダ名の"."と".."は相対パスじゃなかったかな 一個上と二個上の親フォルダだったと思う 間違ってるかもしれないから調べてね
765 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 10:46:46.56 ID:90Vjgj1Fa.net] あ、間違ってたw .がカレントフォルダで..がひとつ上の親フォルダね すんませんな
766 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 10:48:05.37 ID:90Vjgj1Fa.net] あとsplitの問題に関しては読みやすさとか書きやすさじゃね 俺もよくやる 楽だからね
767 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 12:51:59.50 ID:u0gTyM9V0.net] beforeStr = "あ12月い" afterStr = beforeStr.sub(/\d\d月/) do |matched| month = matched.to_i + 1 month = 1 if month == 13 sprintf("%02d", month) end puts afterStr #=> あ01い Ruby で、文字列を置換した。 こういう処理は、Ruby が良い。 PowerShell でも作ってみたが、簡単な置換方法がなかった。 置換時に、コールバック関数を取れる、sub のような関数が無かった わかりやすいように質問者が投稿する時は、名前欄に、717 と入れてくれ
768 名前:744 mailto:sage [2017/12/27(水) 12:58:13.04 ID:u0gTyM9V0.net] 間違っていたので、修正した beforeStr = "あ12月い" afterStr = beforeStr.sub(/(\d\d)月/) do |matched| month = $1.to_i + 1 month = 1 if month == 13 sprintf("%02d", month) + '月' end puts afterStr #=> あ01月い
769 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 13:38:32.87 ID:lJNZ7xHQ0.net] VBA勉強し始めて間もない時に組んだマクロに replaceという名前のプロシージャを作りました そのことはすっかり忘れてたのですが、最近になってそのマクロを手直しする必要があって その中でReplace関数を使おうとしたらエラーが出る おかしいなと思い調べてみたらSub replace() を発見 プロシージャの名前を変えたら大丈夫かと思いきやなぜかどこかに何かが残っているようでエラーがでる 一旦そのモジュールを解放したらReplace関数は使えるようにはなりました しかし、なぜかReplaceと打ってもreplaceとなる replaceと打ってもそのままreplace replaceをReplace関数と認識してくれてはいるものの、どこかに何かが残っている 他のブックでは起きないのでまぁそれほど支障はないものの、もし分かる方いらっしゃったら どうすればいいか教えてください
770 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 13:47:19.08 ID:fCTi8N3va.net] Replaceで変数宣言してみ
771 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 15:20:29.55 ID:DW1nj5RcM.net] >>748 大文字小文字は、現在開いてるコード全体で統一されてしまうからな。 変数でもプロシャージャでもいいから、定義し直すと内部で覚えてる大文字小文字が上書きされるぽ この仕様のせいで、他人の書いたブック開いたまま修正保存するといつのまにか変わってたりする。 するとWinMergeとかでDIFFしたときにイラッ 独り言でした
772 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 18:43:06.62 ID:8Kp24ZKYM.net] プロシージャ外に書いたオブジェクトの寿命はいつまでなのでしょうか? グローバル変数にオブジェクトを保存してそれをfunctionで返すシングルトンオブジェクトを作ったのですが、 プログラムが一度終了して再度起動した際もオブジェクトが残っており、ゴミデータでエラーが起きています。 一度ファイルを全て閉じるまでは残るものなのでしょうか?
773 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 18:55:21.26 ID:K6GLaCg8a.net] >>751 グローバル変数ならエラーで止まるかブックが生きてる限りは生きてるんじゃね
774 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 19:03:21.38 ID:4eyrVwN9H.net] >>751 あとEndで止めると死ぬ
775 名前:デフォルトの名無しさん [2017/12/27(水) 20:23:28.17 ID:ry3vSREld.net] >>753 End なあ、せめて Class_Terminate()して欲しかった
776 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 20:40:54.92 ID:RyDVOJzS0.net] >>734 です。 officeの再インストール試してみましたが 不具合解消せずでした・・・・無念 幸い既存マクロは動くので、新規作成と実行は 他のPCでやることにしました。 不具合はExcelだけで、Accessでは特に問題ありませんでした。 一応ご報告まで。
777 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 20:55:52.26 ID:K6GLaCg8a.net] >>754 てか、マクロ終わったら初期化すりゃよくね? できない仕様なの?
778 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 21:08:27.21 ID:CubzVxEy0.net] >>756 マクロ終わったら誰が初期化するん?
779 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 23:24:01.01 ID:TIhBPqs40.net] >>755 マクロの記録から操作を記録すると 標準モジュール作成される?
780 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 23:29:35.39 ID:0b7v1yOK0.net] >>753 Endだとなにがまずいのでしょうか
781 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 02:02:28.11 ID:uSnaEunu0.net] >>759 Globalで保持していると想定していた変数がいつのまにかクリアされていて想定外の動作をおこし痛い目にあったことがあります。 調べてみたら、エラー発生時またはEnd通過時にGlobal変数の寿命が尽きるようで、、 それ以来、Global変数もEnd Statementも避けています。 記憶が必要な場合は、Cell値やValidation値またはDocumentProperty等を使うようになりました。
782 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 02:45:31.50 ID:m7DZbaKUH.net] VBA初心者です 2つのセルがイコールになるように別のセルの値を変化させるというVBAソルバを作成したいのですが、エラーばかりで全く進みません・・・ 現在は7行目から10行目まで構文エラーが出ています。 どなたかご教
783 名前:願います・・・ Sub Solver() i = 1 Do Until i = 313 '------------------------------------------- Application.DisplayAlerts = False SolverOk SetCell:="K" & i, ByChange:="J" & i SolverAdd cellRef:=Range("K1:K313"), _ Relation:=2, _ FormulaText:=Range("L1:L313"), _ Application.DisplayAlerts = True '--------------------------------------------- SolverSolve i = i + 1 Loop End Sub [] [ここ壊れてます]
784 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 05:04:43.84 ID:BF7frMSQ0.net] >>749 >>750 ありがとうございました。
785 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 08:06:18.47 ID:VokPBxMja.net] >>757 マクロ終わったらオブジェクト破棄するんじゃダメなのかと言うことだが まあダメな使用なんだろうけど
786 名前:デフォルトの名無しさん [2017/12/28(木) 08:14:47.46 ID:ezpQ52SId.net] イミディエイトウィンドウにあるオブジェクトのことだよね
787 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 17:26:42.52 ID:GeC01ME+0.net] >>751 ,760 そもそもプログラムが終了ってどういう事をさしてる? ホントにプログラムが終了すれば、すべての変数の内容は失われるよ たんに実行するコードが無くなっただけではプログラムは終了していない Endはプログラムを終了させるけど、エラー出ただけでは終了するとは限らない デバッグで再実行や変数見たりできるのはプログラムは中断したけど終了してないから
788 名前:753 mailto:sage [2017/12/28(木) 23:10:38.77 ID:lWNTZScR0.net] >>758 753です。 マクロの記録そのものができないのです。 記録しようとすると「マクロの記録ができませんでした」と エラーが出てしまいます。 新規作成と編集が全て制限されているようです。 セキュリティは「すべて有効」で設定しており、 そこでの問題は無いと思うのですが・・・・
789 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 04:00:07.55 ID:G/qmS2zk0.net] >>761 "_" は次の行をつなげるためにつけたのだろうけど Application.DisplayAlearts = True の前の行にも "_" が付いているから 何か貼り付け忘れか、間違って削除してしまったものがあるのでは
790 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 04:08:47.98 ID:G/qmS2zk0.net] セキュリティーレベル一番高いとダメなんじゃね
791 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 07:22:34.45 ID:b/Z/hzqU0.net] >>734 あー、昔そんな事象に当たったことあるよ 原因は同じかどうかは分からんけど 俺の場合とんでもなく深い階層のフォルダに置いてたら VBEのシートモジュールが青く表示されてコードが作成できなくなった そのファイル、とりあえず浅い階層のフォルダや どこかのサーバに置いているなら クライアント側にコピーして内容確認出来る?
792 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 08:53:00.31 ID:JNsjSKSN0.net] 732、753です 皆様レスありがとうございます。 作成の不具合は、全くの新規Bookでも起こります。 既存マクロの場合は、コードの表示と実行は行えますが 編集が制限されています。 問題が発生してから、他のPCで新規作成したマクロを 該当PCで実行しようとしましたが、それはコードの表示すら できませんでした。ファイルサーバー経由とかではなく デスクトップ上に置いて実行しても同じです。 Accessでは特に問題ないので、VBAそのものではなく、 Excel単体の何かだとは思うのですが、皆目見当がつきませぬ。
793 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 10:57:41.44 ID:MXSoKJ1y0.net] >>767 >>761 です 一部コピペして使ったので何か消してしまったのかもしれません・・・ 確認してみます、ありがとうございます。
794 名前:デフォルトの名無しさん mailto:sage [2017/12/30(土) 12:22:18.46 ID:cGzM6pFo0.net] CreateObject("System.Collections.ArrayList")ってやったら .NETのArrayListがVBAで使えてしまったんですが これ隠し機能とかじゃなくて正式に使っていいんですよね?
795 名前:デフォルトの名無しさん mailto:sage [2017/12/30(土) 13:25:09.57 ID:dKM8JRI70.net] 前にも話題に上がったけど .NETのほんの一部はVBAからも使える リファレンスにも書いてあったような気がする 他で代替できるのでArrayListをわざわざ使うメリットはないということで その
796 名前:ときは終わったと思う [] [ここ壊れてます]
797 名前:デフォルトの名無しさん mailto:sage [2017/12/30(土) 15:32:35.43 ID:cGzM6pFo0.net] >>773 参考にします。ありがとうございました
798 名前:デフォルトの名無しさん mailto:sage [2017/12/30(土) 15:33:00.15 ID:xXJ5T9Ia0.net] >>772 .Net Frameworkの機能でコンストラクタに引数を渡す必要のないものは使えるらしい >>773 ArrayListは各種メソッドが揃ってるからコレクションより使いやすいんじゃね?キーを使わないなら ただ遅いのがたまに傷
799 名前:デフォルトの名無しさん [2017/12/31(日) 01:12:29.94 ID:z2hgHR3O8] フォルダ(C:\print)内の複数のPDFファイル(ファイル名不規則)を、各々1頁目のみ連続印刷したいと思ってます。 VBAやコマンドライン初心者ですが、ネットで調べたところPDF xchange viewerのコマンドラインで1頁目のみ連続印刷する方法はわかりました。 しかし、下記のように各ファイルについてファイル名もパスも記載しないとダメなようでした。 PDFXCview.exe /print:pages=1 C:\print\123.pdf C:\print\abc.pdf VBAの方では下記のように*.pdfでファイル名必要なく連続印刷できますが頁指定の仕方が分かりません。 /tをとれば印刷ダイアログ開いて頁指定できますが、いちいち全てのファイルについて指定しないといけないので余り意味がありません。 何か良い方法がないでしょうか。 Sub pdf印刷() Dim strPath As String Dim strFilename As String Dim myShell As Object Set myShell = CreateObject("WScript.Shell") strPath = "C:\print" strFilename = Dir(strPath & "\*.pdf") Do While strFilename <> "" myShell.Run ("AcroRd32 /t " & strPath & "\" & strFilename) strFilename = Dir Loop Set myShell = Nothing End Sub
800 名前:デフォルトの名無しさん [2017/12/31(日) 08:34:16.68 ID:5sx4VZ0k0.net] >>774 Windows APIだって使えるんだぞ?
801 名前:デフォルトの名無しさん [2017/12/31(日) 08:58:37.79 ID:TXRnAgcd0.net] VBAの保存方法について バックアップどうしてますか? VBAのマクロだと戻る釦聞かないし、バグって復旧するとマクロの個所全部消えちゃうので2つくらいのバックアップを別ファイルでとってあるんですけど皆さんはどうしてますか? まだ素人なので思ったのと違う処理になって戻せなくなることがしょっちゅうあるので バックアップは大事
802 名前:775 [2017/12/31(日) 09:02:17.31 ID:TXRnAgcd0.net] >>778 戻る釦ってまるい矢印の奴ね
803 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 09:09:26.61 ID:PwPBZUwb0.net] >>778 バージョン管理システム入れてないなら同じになるでしょ。 俺も同じくでファイル名_Ver nnn.xlsmと言うかたちで3世代別フォルダに保存してるけど (時たま忘れたりする^^;
804 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 09:49:30.47 ID:aMifsa1T0.net] マクロ有りエクセルファイル自体にデータを入れて運用するのと、 データは別エクセルファイルにしてマクロ有りエクセルファイルでデータ入りエクセルファイルを操作するのと、 どっちがメンテナンスしやすい作り方だろうか? いつも悩んでしまう
805 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 09:52:29.70 ID:35C6Q16O0.net] アドインマクロにしましょう
806 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:06:17.25 ID:fsRyV04Q0.net] マクロのバージョン管理ってどうやってます? インポートファイルを分けすぎると不便なのでshareFanction見たいなインポートファイルに使いそうな関数全部入れてますが、初心者なもので開発中に関数の引数や戻り値を変えたくなるような場面が多々あり 今までのshareFanctionと互換性が保てなくなりますが、引数と戻り値を修正した関数以外でバグを潰したような関数は最新を使用したいです。 今はコピペで対応してますが
807 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:27:58.03 ID:rNrttlhS0.net] 個人なのか仕事なのか書かないと有効なレスがつかないのではないかな
808 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:34:47.18 ID:fsRyV04Q0.net] >>784 個人です 個人で開発、個人で使用
809 名前:ナす [] [ここ壊れてます]
810 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:36:51.05 ID:rNrttlhS0.net] >>785 ならGithubとSourceTreeで快適にできるんじゃないの? 俺も全然高度な使いこなしできてないけど楽ちんだ
811 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:55:17.97 ID:fsRyV04Q0.net] >>786 ありがとうございます ざっとみた感じソースファイルのバージョン管理はできそうですが、 例えばサーバーあるいはローカルマシン上にそのshareFanctionを使用している分散しておいてある場合、 それぞれのマクロを調べて更新したいファイルを選択、修正版マクロを適用する、 みたいな使い方ってできるんですかね?
812 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:57:21.02 ID:fsRyV04Q0.net] >>787 >>例えばサーバーあるいはローカルマシン上にそのshareFanctionを使用している分散しておいてある場合、 修正 shareFanctionを使用しているファイルが
813 名前:デフォルトの名無しさん [2017/12/31(日) 12:53:47.48 ID:TXRnAgcd0.net] ヴァージョンって仕事じゃないからいつから何時まででUP履歴にしたらいいかわからなん 機能変更したら必ずかもしれないけど、個人用だとやりながら変更しているからバージョン数が半端ないことになる。
814 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 13:10:06.47 ID:sYPUhsnja.net] バージョン管理は大変だよな インストーラーみたいなのつくってどうにかしようとしてるがうまく行くかわからん
815 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 13:25:39.05 ID:pVPyHW7p0.net] >>789 > バージョン数が半端ないことになる。 問題ないでしょ
816 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 13:31:04.61 ID:fsRyV04Q0.net] >>790 専用のソフトがなければ1sheetをマクロ関数管理用にして各関数内にver x.y.z(x変更で互換性無し、y変更で互換性あり、z変更は互換性ありバグ修正みたいにして) モジュールをインポートしたファイルをオープン時に、イベント検知で所定の管理ファイルを検索、新しいバージョンがあれば自動で今までのモジュールを解放、y,zバージョンが最新のファイルをインポート みたいにすれば実現可能そうですが結構手間がかかりそうで…
817 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 13:56:42.14 ID:hllNi94Va.net] マクロで書けよ。 バージョン管理。 セキュリティが低下するけどな。
818 名前:デフォルトの名無しさん [2017/12/31(日) 18:06:59.07 ID:nOUozIFo0.net] そもそも論として、たかがマクロでバージョン管理が必要になるような力作()作るなよw キミたちは一体エクセルマクロで何を築こうとしておるのかねw
819 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 18:13:51.04 ID:2b4EaTgg0.net] 仕事でVBA扱ってると色々な理由から小さいマクロでもバージョン管理が必要になってくる。
820 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 19:27:51.32 ID:rNrttlhS0.net] >>794 内容がぐちゃぐちゃになったら困るものにはバージョン管理が必要さ 力作()でなくても再構築はかったるいからな
821 名前:デフォルトの名無しさん [2017/12/31(日) 19:58:25.49 ID:nOUozIFo0.net] >>796 力作()じゃないのにぐちゃぐちゃになるってどんだけ当てずっぽうにマクロ書いてんだよw
822 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 20:00:31.71 ID:pVPyHW7p0.net] 社内に展開するとかでサポートが必要ならバージョン管理ぐらいは必須だろ >>794 は無知すぎ
823 名前:デフォルトの名無しさん [2017/12/31(日) 20:24:53.68 ID:nOUozIFo0.net] >>798 確かにおまえらの考える事は見当もつかんけどなw 別にいいや無能思考に明るくならなくてもw
824 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 20:28:42.31 ID:1PdKj8Yj0.net] またメゾット君か。
825 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 20:42:44.41 ID:rRjJbr8wx.net] メゾット君って雰囲気ですぐ分かるよね
826 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 20:54:32.08 ID:KnonKKai0.net] OLDフォルダにファイル名の後に日付つけたファイルをコピーしてる
827 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 21:20:00.26 ID:A+5By6dM0.net] ていうかバイナリファイルをバージョン管理システムに登録したところで 単なる時系列バックアップにしかならんうえに シートを更新しただけでバージョンが変わるから意味ないのでは
828 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 22:37:10.58 ID:rNrttlhS0.net] 力作2.0
829 名前:デフォルトの名無しさん [2017/12/31(日) 22:50:02.43 ID:InzisC8s0.net] 悩みはみんな一緒なんだね。俺はバージョンアップに悩んでアドイン化したが これはこれで悩ましいところがあるんだな。シートを初期化(つまりClearとかClearContents)する のにもよーく考えないと結構危ない。アドインはどのブックでも実行出来てしまうからPCに疎いヤツが使うのも考えると 別の方法を考えた方が良いんだろうかとか考えてる。
830 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 22:55:00.56 ID:rNrttlhS0.net] >>805 アドインてxlamのこと? だったらそのシートは一切使っちゃダメだよ プログラムモジュールだけの存在にするべき
831 名前:デフォルトの名無しさん [2017/12/31(日) 23:12:43.15 ID:InzisC8s0.net] >>806 そりゃ分かってるての。ブックを指定する時は「ActiveWorkBook」とするしかない(決めつけはよくないが) からよーく考えてコードを書かないと危ない場合もあるって話。使う連中の9割はマクロどころかシート関数も 知らないような連中なんだから。
832 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 23:41:30.90 ID:rNrttlhS0.net] >>807 ・処理をスタートするFunction や Subはアドイン側にはない。当該Book側にある ・そのFunction や Subがアドイン側の機能を使う だとするとアドイン側に「ActiveworkBook」なんて書く必要はなくて、処理対象のSheetやRangeを 引数で受け取るだけになると思うんだがね
833 名前:デフォルトの名無しさん [2017/12/31(日) 23:52:05.59 ID:InzisC8s0.net] >>808 作業するBookはxlsxなんだよ。マクロはxlms側に書いてある。 なんでこうしたかというと、仕事柄、ブックは地方自治体に提出する場合があるから。 何の事かわからないだろうからもうちょっと書くと、測量データの野帳なんだよ。
834 名前:806 [2017/12/31(日) 23:53:24.81 ID:InzisC8s0.net] xlmsじゃねえや、xlamだな。
835 名前:デフォルトの名無しさん [2018/01/01(月) 04:27:25.57 ID:WDGj6QXoH.net] >>809 マクロ有効ブックから マクロ無効ブックを開いて処理して保存して閉じる という方法も有ると思う
836 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 09:37:05.14 ID:hnfikatx0.net] 自動処理したいなら>>811 だろうし、操作者が開いて何かしたいならメニューに追加しとけばいいだけだと思う >>809 は無知なのかちょっと頭固いんだろうな
837 名前:デフォルトの名無しさん [2018/01/01(月) 13:40:19.53 ID:iV2QIiO7H.net] >>812 作業ブック側にコード書けないんだよ。知ったかすんなよボケ
838 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 13:55:03.62 ID:7v1CUCWaM.net] >>813 作業ブックにコードなんか要らんだろ w 知らないなら黙ってろ てか、アドインでメニュー追加なんて基本中の基本だと思うが toshimana.hatenablog.com/entry/2014/01/26/204938
839 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 14:25:45.74 ID:7yffOGmB0.net] 知らないことを素直に知らないと言いなさい
840 名前: mailto:sage [2018/01/01(月) 14:27:07.60 ID:tZ/lpIQo0.net] 今年はいい年になるかなw
841 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 14:29:26.10 ID:UomJiKNZ0.net] >>814 Workbook_AddinUninstall てのは知らなかったな。 Workbook_Open するのと効果は違うんだろうか?
842 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 14:54:13.21 ID:ixsE+qrMx.net] またメゾット君が暴れてるな あの馬鹿が出入りするようになってから荒れすぎ
843 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 15:45:18.49 ID:bzNinO0Ma.net] >>817 よく考えろよ
844 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 16:11:19.12 ID:PLRWaMeF0.net] >>819 おっと、 Workbook_AddinInstallを Workbook_AddinUninstallと書き間違えた
845 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 09:36:26.90 ID:nA397GZea.net] >>820 だとしてもだ イベントの言葉の意味そのままだよ よく考えろよ
846 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 12:29:02.41 ID:MKa2S+Tjd.net] >>821 「対象のアドインを参照設定しているブックを開いた」というイベントを想定してた そうじゃないのね
847 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 10:57:08.56 ID:rhTFyGx/0.net] >>806 そんなことはない。 設定値を保存するためのiniファイルの代わりにするとか、テンプレートの代わりにするとか、使い道は沢山ある。
848 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 11:46:24.84 ID:ZpYRfYyG0.net] アドインにするにしてもなんにしても運用がしっかりされてないと意味がない ファイル名やシート名程度が保証されてないならマクロ化なんて諦めろ
849 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 11:59:35.70 ID:Uz65NhYa0.net] >>823 設定値を保存するのはやめたほうが良いと思うな。 バージョンアップしたときに設定値がリセットされてしまうとか、エクセルバグの巻き添えでブック破損の危険性がある。 できるだけアドインは読み取り専用で運用するべきだと思う。 過去に内部シートに保存するように作って問題が起きたので、バージョンアップ時にxmlにコンバートさせた事があるわ
850 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 12:49:50.09 ID:lLEkaf6s0.net] お前のバグを根拠にされてもなぁ
851 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 14:45:49.49 ID:hfgsKA7ma.net] まあ、設定は外出しにするのが普通に安全策じゃね? xlamのシートは明らかに利用してほしくないっていう思いが伝わる作りな訳だから
852 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 15:32:51.77 ID:00k1dN96d.net] 利用者が不用意にセルデータをクリアしてそのままセーブしても自覚すらしないかも
853 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 05:46:13.89 ID:UuI+tM4Q0.net] 質問よろしくお願いします。 A列,B列,C列,D列 Aa,111,bbb,20 Bb,111,aaa,30 Aa,222,bbb,10 Bb,111,aaa,10 Aa,111,bbb,15 上記の様な表を下記の様にしたいです。 A列,B列,C列,D列 Aa,111,bbb,35 Aa,222,bbb,10 Bb,111,aaa,40 A,B,C列の値が一致したらD列を加算して行を削除するという処理です。データは約1000行程です。
854 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 06:37:20.49 ID:MFccPkO20.net] 1000行程度ならSUMIFSとかでできるんじゃないの
855 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 06:55:39.59 ID:IcyEu6L/M.net] >>829 要件によるけどそういうビューを作ればいいんじゃね? create view V as ( select A列,B列,C列,sum(D列) as D列 from 表 group by A列,B列,C列 )
856 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 06:57:20.78 ID:IcyEu6L/M.net] すまん、寝ぼけててSQLスレと勘違いしてた... >>831 はなしで
857 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 07:39:39.14 ID:IGCyfMcU0.net] >>829 見るからにデータベース向けの案件 集計するキーとなる列が左端一列、その右に合計対象の数値列という2列形式なら データタブにある統合でできるんだが
858 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 08:01:11.56 ID:5mprgbRzp.net] >>830 すみません説明不足でした。 キー項目が1000種類以上あり、毎回CSVから読み込んでから処理をする為、事前にWorkSheet関数を作っておくのが難しい状況です。 何か手はありますか?
859 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 10:15:47.38 ID:fF+rBx/60.net] データベース系のデータは素直にデータベースソフトで管理しようよ・・・。 アクセスでやればマウス
860 名前:操作だけで終わる様な問題だよ。 [] [ここ壊れてます]
861 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 10:22:48.62 ID:d1LyNdol0.net] >>834 ADOでcsvファイルをデータベースとして接続して >>831 に挙げられた SELECT文を実行する、という手段がとれる
862 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 10:31:44.20 ID:no6Ylxj0a.net] sqlならselectとorder byだけですむ案件だな 愚直にプログラム組むと厄介だけどね
863 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 10:38:07.48 ID:7zx5w2nrd.net] ピボットでいいんじゃね
864 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 11:56:10.93 ID:iFN99ve4d.net] LINQって使えないんだっけ?
865 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 13:22:48.32 ID:Gj6t78kg0.net] >>829 嘔吐フィルターかけてソートしてから 一致を
866 名前:上からみて加算と消去 フィルター解除忘れずに(多分ソート直後にすぐ) [] [ここ壊れてます]
867 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 13:42:37.28 ID:hO93+Igl0.net] >>829 ↑ 上級者じゃない俺なんかこういうのみると 全部2次元配列にぶちこんでif多用して無理矢理やっちゃうんだけど そういうのはだめなの?
868 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 13:47:48.60 ID:cJgHrV+ta.net] >>841 だめじゃないし、初心者なら無理やりVBAで組むのも勉強になるよ 重複の無いリスト作るのがやや面倒というか、煩雑になりがちなところだな エクセルの機能使えばいいっちゃいいけど、好みじゃないな
869 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 13:55:27.88 ID:hO93+Igl0.net] >>842 おれこういうの無理矢理やっちゃうの大好きで完成すると充実感半端ない 俺が組むマクロってそんなのばかりだ 基本初心者レベルの知識しか使わないでやっちゃうんで、 こういう質問をする人は、無理矢理やると遅くなるとか別の理由があって聞いてるのかな? とか思っちゃう
870 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 15:19:59.75 ID:kPmYITG+0.net] ファーム1の中に、オプションボタンが18個あり、オブジェクト名を『OP_1』〜『OP_18』としてボタン1を押してフォーム2に切り替える時に選択されてるオプションボタンのキャプションを取得して変数TUR1に入れたいんですけどどうしたらいいですか?
871 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 16:20:08.23 ID:pGh8JphK0.net] >>844 For i = 1 To 18 With Me.Controls("OP_" & CStr(i)) If .Value = True Then TUR1 = .Caption Exit For End If End With Next
872 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 17:41:48.62 ID:uhyB+DSmd.net] 初心者なんだけど以下のような表から特定のセルに入力された場合だけ、特定のセルをカウントする方法ってありますか? Aは全て Bは選ばれたものだけ、みたいな Aの全てをカウントするのはわけないんだけど、Bの選ばれたものだけをカウントする方法がわからない IF使うにしても何を指定すればいいのでしょう? わかりにくかてすいません o.8ch.net/11r7r.png
873 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 17:54:54.38 ID:IwnGnNnba.net] >>843 普通にやり方がわからないんじゃないの >>846 cがキーになるなら重複しないcの一覧をつくって二次元配列でも構造体でもいいけどbがtrueならカウントするっていう風にすればいいと思う 件数多いならDBの領分だと思うけどね、この手の集計は
874 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:02:17.19 ID:HiTEnEcXd.net] >>845 ありがとうございます!
875 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:13:43.61 ID:uhyB+DSmd.net] >>847 Bがtrueなら、というのはどうやって指定すればいいですか? 範囲指定で
876 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:23:20.07 ID:uhyB+DSmd.net] すいません、間違えて書き込んでしまいました >>847 Bがtrueなら、というのはどうやって指定すればいいですか? 範囲指定でがっつりやると、指定した範囲に一つでもtrueがあるとカウントしてしまって結局全部をカウントしてしまうんです
877 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:27:59.94 ID:iMxAIJokM.net] >>829 何も難しく考えなくても、E列に=A&B&Cを入れて、E列を行ラベルにしてピボットテーブルで集計するだけで出来るよ。 ABC列をもどしたいならINDEX,MATCHで引っ張って来ないといけないけども、日々エクセル使ってる人なら手慣れたものだと思う。と言うか慣れておくと色々便利。 詳しい解説いるならする
878 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:58:58.92 ID:IwnGnNnba.net] >>850 一行ずつループしてるんだよね? フラグ用に変数用意してるなら一ループごとに初期化し直さないとだめよ ってか、今どんなコードで動かしてるか書いてくれるとやり易いんだけど
879 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 02:37:52.28 ID:Uixpo
] [ここ壊れてます]
880 名前:pG00.net mailto: フィルタとCOUNTIFで良い気がするが どうしてもVBAでやりたいのか? [] [ここ壊れてます]
881 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 17:45:28.92 ID:Kfn/8I4m0.net] HTMLソースで <a href = URL1</a> <br />**** ← 4桁の特定の数字が入る <a href = URL2>予約中</a> <a href = URL3>[取消]</a><br /><a href = URL4>[訂正]</a> 上記の4桁の数字とURL以外同様のソースが全部で10個あるページがあり、C5セルに4桁の数字を入れ、それに対応したURL3のリンクをクリックしたいのですが、どうすれば可能でしょうか? IEでそのページまで飛ぶのは問題ないのですが、aタグのインナーテキストが4桁の数字以外共通なためForとGetElementsByTagNameとの組み合わせでクリックできないので何か手段があれば教えて頂きたいです。
882 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 21:06:25.46 ID:UyFZaUswa.net] >>829 そういう処理だったらソートしても問題無さそうだからソートしてループで良いんじゃね? >>854 4桁の数字以外共通だとどうしてForとGetElementsByTagnameとの組み合わせでクリック出来ないのかが分からん。
883 名前:851 mailto:sage [2018/01/05(金) 21:25:01.57 ID:Kfn/8I4m0.net] >>855 あ、確かに。書き間違えました。下記のコードだと10個のリンクのうち、一番上にあるやつをクリックすると思うのですが、 C5セルに入力した特定の4桁の数字の下にあるリンクをクリックしたいのです。 For Each obj In objIE.Document.getElementsByTagName("a") If InStr(obj.innertext, "取消") > 0 Then obj.Click Exit For End If Next
884 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 22:16:41.06 ID:vO88ak3C0.net] DOMに親要素とか隣の要素を見ていくのあったよね あれで必要なだけ移動させればいいんじゃね
885 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 22:20:08.87 ID:vO88ak3C0.net] >>829 を >>836 の方法で頑張ってコードにしたのを書き込みたいんだけど 403になっちゃうのよね 禁断のコードが含まれているのかしら
886 名前:デフォルトの名無しさん [2018/01/07(日) 08:20:46.08 .net] >>846 VBAを使わずにExcelの計算式で書くとこうだよね。 ・C列が「10」、B列が「○」の行を数えるなら =COUNTIFS($C$2:$C$6,10,$B$2:$B$6,"○") ・C列が「10」、B列が空以外の行を数えるなら =COUNTIF($C$2:$C$6,10)-COUNTIFS($A$2:$A$6,10,$B$2:$B$6,"") これをVBAで書きたいなら、そのままワークシート関数を呼び出せばいい。 ・C列が「10」、B列が「○」の行を数えるなら With Worksheets("Sheet1") dblCnt = WorksheetFunction.CountIfs(.Range("C2:C6"), 10, .Range("B2:B6"), "○") End With ・C列が「10」、B列が空以外の行を数えるなら With Worksheets("Sheet1") dblCnt = WorksheetFunction.CountIf(.Range("C2:C6"), 10) - WorksheetFunction.CountIfs(.Range("C2:C6"), 10, .Range("B2:B6"), "") End With 注:COUNTIFS関数はOffice 2007で追加されたので、2003とかでも動くようにするには 計算式なら配列数式を使うかダミーの結合列 (例: F列に =B2&”:”&C2)を使う必要があるし、 VBAなら自前で1行ずつループするFor文を書く必要がある。
887 名前:デフォルトの名無しさん mailto:sage [2018/01/08(月) 01:12:41.23 ID:bgHHDE53D] >>856 すごい お馬鹿な返信で申し訳ないけど イメージとしてまず、 <a href = URL1</a> <br />**** ← 4桁の特定の数字が入る <a href = URL2>予約中</a> <a href = URL3>[取消]</a><br /><a href = URL4>[訂正]</a> の部分がページ内で繰り返して複数あるなら、この部分だけを取り出す処理を繰り返して splitなりで個数を数えて 処理するとか。(取り出す位置は、InStrで取って、終わり位置を 次の開始位置にして) その上で、この部分にC5と同じ値があるならクリックするとか。 C5の値を変数aにして、InStr(取り出した部分, a) > 0で良いような。 すいません。曖昧な返信で。
888 名前:sage [2018/01/11(木) 23:28:08.34 ID:kwmxLljDv] 教えていただきたいです。 あるセルの数字に関して o以下と12以上はA 6以上12未満はB それ以外はなしという式を作るとしたら =if(or(セル<0,セル>=12),"A",if(6<セル=<12,"B"," ")) という式ではちゃんと返ってきません。 正しい式をご教授願います。
889 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 12:40:04.91 ID:eKl5cJvJd.net] コンボboxを使ってサジェスト機能みたいなことをしたくて作ってみたんだけど、1文字目はうまくいくんだけど2文字目以降打つとリストの一番上が乗ってきて使い心地が良くないんだけど、どうしたらいいですか? コンボboxのリストのみをクリアするやり方もいまいちわかりません。 j=2 Tname.rist=array() set MstSht=worksheets(″マスター″) str_word=controls(″Tname″&j).value for i=2toMstSht.cells(rows.count,6).end(xlup).row if instr(ucase(MstSht.cells(i,6).value),ucase(str_word))=1 then controls(″Tname″&j).additem MstSht.cells(i,6).value end if next
890 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 19:23:41.06 ID:WJjCr32Q0.net] エクセルの2003ですが、 並べて比較を使用した際にペアになっているブックと、 そのブックで表示されているシートを取得するには どのように記述すればいいでしょうか。
891 名前:デフォルトの名無しさん [2018/01/11(木) 21:16:23.66 ID:JbTpKTF6M.net] >>863 何を言っているのでしょうか?
892 名前:デフォルトの名無しさん [2018/01/11(木) 21:25:37.65 ID:a2sLbYI50.net] 世界教師マイトLーヤ「大暴落は日本からスタート」 rio2016.5ch.net/test/read.cgi/2chse/1512813686/l50 【マイトLーヤ】 米国債を売れ 【1200兆円】 https://medaka.5ch.net/test/read.cgi/eco/1515587891/l50
893 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 01:30:55.27 ID:GWvM9lig0.net] >>863 Excel2003はサポート切れてますので Excel2007にのりかえましょう
894 名前:デフォルトの名無しさん [2018/01/12(金) 01:41:04.62 .net] >>866 Excel2007なら>>863 できるん?(´・ω・`)
895 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 15:56:41.55 ID:kdQVxAch0.net] 0回目って何?
896 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 19:59:42.26 ID:8L8z7qJh0.net] vbModelessで開いたUserForm上のTextBoxにSetFocusするようInitializeに記述しても効きません これって無理なんですかね? vbModelessを切るとフォーカスがちゃんとTextBoxに移るんですけどね
897 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 23:20:03.95 ID:Ln5WwMFr0.net] 初期状態でフォーカスを当てたいなら UserForm.Show vbModeless UserForm.TextBox.SetFocus とフォームを呼んでいるプロシージャ側に書く フォームのイベントならActivateでどうでしょう 毎回フォームがアクティブになるたびフォーカスしちゃうけど Initializeがなぜはしらないのかは知らない
898 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 23:44:10.99 ID:Ln5WwMFr0.net] 実験してみたらInitializeは呼ばれてるけど SetFocusだけがだめみたい 他のことは普通にできる なんでしょうね
899 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 23:46:18.93 ID:WKndAwKhM.net] いやExsel 2007もサポート切れてますが
900 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 03:26:50.74 ID:0Hr8k8ED0.net] >>871 自分でもいろいろやってみたんですけどやっぱりダメみたいですね ありがとうございました
901 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 09:26:06.50 ID:60QkmGs40.net] 試してないけど、プロパティのTabIndexも駄目だったの?
902 名前:デフォルトの名無しさん [2018/01/13(土) 10:05:22.76 ID:8yN0Kzpj0.net] ThisWorkbook.Application.Hwndでブックのハンドルを取得して、 SetLayeredWindowAttributesで透過処理をする時、 LWA_ALPHAでは問題ないのに、 LWA_COLORKEYに変えると、なぜかブック全体ではなく、 シート上に最初に配置したコマンドボタンの方に誤爆します。 しかも、自分のPCでは問題ないのに、他人のPCだと誤爆するという意味不明さ。 ハンドルがずれる的なバグでもあるのでしょうか?
903 名前:デフォルトの名無しさん [2018/01/13(土) 10:12:39.30 .net] ウィンドウ表示時にフォーカス当てたいんならTabIndex=0にすればいいんだと思うけど、 あとはフラグを使ってInitialize直後のActivateイベントでフォーカスを当てればいいんじゃね? Private mblnInitFlag As Boolean Private Sub UserForm_Activate() If mblnInitFlag Then TextBox2.SetFocus mblnInitFlag = False End If End Sub Private Sub UserForm_Initialize() mblnInitFlag = True End Sub
904 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 10:19:25.53 ID:WLDq+ue70.net] 一つ目の表 A,B,C,D,E aaa,bb,cc,00,20 bbb,cc,dd,11,30 二つ目の表 G,H,I,J,K aaa,bb,cc,00,10 bbb,cc,dd,11,10 上の様な表があり、一つ目のABC列と二つ目のGHI列の値が一致すれば、二つ目の表の横にE列からK列の数値を引いた値を表示したい。 一致するデータが無ければ、一致データ無しと表示。 上の表だと2つ目の表の右列に、それぞれ10,20と表示。 データ量は300~800程です。 出来る方、よろしくお願いします。
905 名前:デフォルトの名無しさん [2018/01/13(土) 10:29:13.82 .net] >>875 LWA_COLORKEYは指定した色を透明にするんだから、 その他人のPCでExcelのウィンドウの色が違うんじゃね? 知らんけど
906 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 10:31:29.99 ID:uYJANG/vd.net] 既存プログラムで引数が多いやつを減らしたいんだけどどうすればいい? ただグローバル変数使うと他のアプリケーションに影響出るから使えない。 今から構造化やクラスにするのは名前変更が大変そうだし、同じ型でも同じ動作でもないからまとめにくい。
907 名前:デフォルトの名無しさん [2018/01/13(土) 10:39:42.82 ID:8yN0Kzpj0.net] >>878 それが、コマンドボタンとシートの色を同じにしても、 コマンドボタンの方だけ透過されるんです。 しかも最初に配置したコマンドボタンだけ。 2個目以降は変わらず。 透過の前後で、ハンドルの値をデバッグプリントしても変化ないですし。
908 名前:デフォルトの名無しさん [2018/01/13(土) 10:49:24.82 .net] >>877 2007以降限定でよければL列に計算式埋め込んじゃうけどね =IF(COUNTIFS($A:$A,$G1,$B:$B,$H1,$C:$C,$I1)>0,SUMIFS($E:$E,$A:$A,$G1,$B:$B,$H1,$C:$C,$I1)-$K1,"一致データ無し")
909 名前:デフォルトの名無しさん [2018/01/13(土) 11:20:55.87 ID:8yN0Kzpj0.net] ちなみに、こんなのです。 Sub test(ByVal Flg As Boolean) Dim Hwnd As Long: Hwnd = ThisWorkbook.Application.Hwnd Call SetWindowLong(Hwnd, -20, &H80000) If Flg Then Call SetLayeredWindowAttributes(Hwnd, 0, 200, 1) '←成功 Else Call SetLayeredWindowAttributes(Hwnd, 0, 200, 2) '←コマンドボタンに誤爆 End If End Sub 変えているのは最後の引数だけなんですが。
910 名前:デフォルトの名無しさん [2018/01/13(土) 11:27:43.02 .net] >>879 Sub test1() Dim args(5) As Variant Dim arg1 As String Dim arg2 As Long Dim arg3 As Variant Dim arg4 As Workbook Dim arg5 As Collection arg1 = "test" arg2 = 123 arg3 = ActiveSheet.Cells(1, 1) Set arg4 = ActiveWorkbook Set arg5 = New Collection arg5.Add New DataObject arg5.Item(1).SetText "sample" args(1) = arg1 args(2) = arg2 args(3) = arg3 Set args(4) = arg4 Set args(5) = arg5 Call test2(args) End Sub ‘ ―― Sub test2(ByRef args As Variant) Dim arg1 As String Dim arg2 As Long Dim arg3 As Variant Dim arg4 As Workbook Dim arg5 As Collection arg1 = args(1) arg2 = args(2) arg3 = args(3) Set arg4 = args(4) Set arg5 = args(5) Debug.Print arg1 Debug.Print arg2 Debug.Print arg3 Debug.Print arg4.Name Debug.Print arg5.Item(1).GetText End Sub
911 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 13:04:46.60 ID:WLDq+ue70.net] >>881 列の挿入や削除の処理があるので、数式だと参照ズレなどが起こってしまうので出来たらVBAで処理したいと考えています。
912 名前:858 mailto:sage [2018/01/13(土) 13:29:13.07 ID:eGapce6A0.net] >>866 Excel2010を用意しました。 >>864 エクセルで「Book1」「Book2」「Book3」を開いた状態で、 「Book1」「Book2」を並べて比較している時に、 ペアになっている「Book1」「Book2」を特定する方法、 もしくは「Book1」がActiveWorkbookの時に「Book2」を特定する方法が知りたいのです。
913 名前:デフォルトの名無しさん [2018/01/13(土) 13:42:21.62 .net] >>885 計算式でできればVBAでもそのままできるやん >>859 参照
914 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 13:47:55.56 ID:fyAvIt7m0.net] 並べて比較って 人間が何かを見比べて確認しているわけだから その作業は人間がやる必要ないとおもうので 全部VBAでバックグランドで処理すればいいのではないかと単純に思ってしまう 最後に比較した結果だけ表示してあげる
915 名前:デフォルトの名無しさん [2018/01/13(土) 15:21:57.51 ID:eGapce6A0.net] >>886 比較自体は計算式でできますが、 比較する対象を特定する事は計算式でできない気がします。 >>887 挿入等によって比較したい箇所がBook1と2で異なる可能性がある為、 事前に比較の起点となる箇所を選択する必要があります。
916 名前:デフォルトの名無しさん [2018/01/13(土) 16:53:07.70 .net] >>888 > 比較する対象を特定する事は計算式でできない 意味分からん =IF(COUNTIFS($A:$A,$G1,$B:$B,$H1,$C:$C,$I1)>0,SUMIFS($E:$E,$A:$A,$G1,$B:$B,$H1,$C:$C,$I1)-$K1,"一致データ無し") この計算式を単純にVBAに置き換えて With Worksheets("Sheet1") If WorksheetFunction.CountIfs(.Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) Then .Range(“L1”) = WorksheetFunction.SumIfs(.Range(“E:E”), .Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) - .Range(“K1”) Else .Range(“L1”) = “一致データ無し” EndIf End With 行列を変数で指定できるように.Rangeを.Columnsや.Cellsに置き換えて数値で指定できるようにして With Worksheets("Sheet1") If WorksheetFunction.CountIfs(.Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) Then .Cells(1,12) = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) - .Cells(1,11) Else .Cells(1,12) = “一致データ無し” EndIf End With あとは必要なところを変数化してループを回せばいいじゃん Dim rngCell As Range Dim lngRow As Long ‘ ループを回すため行番号を変数化 With Worksheets("Sheet1") Set rngCell = .Cells(1, 12) ‘ 表の詳細仕様が分からないのでとりあえずK列が空じゃない限りループ続行 While rngCell.Offset(0, -1) <> “” lngRow = rngCell.Row If WorksheetFunction.CountIfs(.Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) Then rngCell = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) - .Cells(lngRow,11) Else rngCell = “一致データ無し” EndIf Set rngCell = rngCell.Offset(1, 0) ‘ 次の行 Wend End With 列の追加削除があるということだったら列番号も変数化すればいい
917 名前:デフォルトの名無しさん [2018/01/13(土) 17:00:25.96 ID:zzyV/8sb0.net] 初心者で申し訳ありません セルに入力した選手コードを選手名に置換するような動きをさせたいのですがどうするとよいでしょうか 別のシートに選手名簿は用意してありA列に選手コードB列に選手名があります
918 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 17:42:32.57 ID:8qhapkmN0.net] >>890 VBA要らん VLOOKUPでググれ
919 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 17:48:09.64 ID:8qhapkmN0.net] すまん「置換」を見落とした VBAは要るな WorksheetFunction.VLookup でやるなり、ループで検索するなりやればいい
920 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 17:50:29.11 ID:gLbKwyK9x.net] >>890 普通はセルに入力された選手コードをわざわざVBA置換するなんてことはしないで、VLOOKUP等のワークシート関数を書くけどね 置換操作をVBAで書かなきゃいけない理由はあるの?
921 名前:デフォルトの名無しさん [2018/01/13(土) 17:58:56.84 .net] >>890 >セルに入力した選手コードを選手名に置換するような動きをさせたい セルに選手コードを入力して、Enterを押した途端に選手名に置き換わるような動きをさせたいんだな?そうなんだな?
922 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 18:00:41.47 ID:gLbKwyK9x.net] >>892 検索置換のダイアログでシート内の選手コードを一括変換する、みたいな手作業の業務手順をそのままマクロ化しようとしているのかもしれないし、そういう場合はそもそもシートの設計や業務手順に問題がある場合が多い。 最初にVLOOKUP使えと指摘したあんたの感覚は基本的には正しいと思うぞ。
923 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 18:06:27.84 ID:fyAvIt7m0.net] >>890 単発ならワークシート関数でやった方が簡単 VLOOKUPで変換したのを用意しといてそれをごそっと上書きする 何回もやるなら、上記をマクロにする このくらいならマクロの記録でもいけそう 全部VBA上でやる方法もあるけどビギナーには大変でしょう こんな感じでいいんじゃなかろうか Dim i i = スタートする行 Do While Not Worksheets(1).Cells(i, 1) = "" Worksheets(1).Cells(i, 1) = WorksheetFunction.VLookup _ (Worksheets(1).Cells(i, 1), Worksheets(2).Range("名簿範囲"), 2, 0) i = i + 1 Loop シートのインデックスとかは書き換えてね 意味不明ならマクロ記録かさらなる修行をオススメする
924 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 18:07:34.63 ID:gLbKwyK9x.net] >>894 VBAに慣れてる人ならセル値の置換と聞いただけでワークシート更新イベントを使いたいのかなって思いがちだよな 俺も最初はそう思ったわ でも質問者の質問内容を推測抜きで素直に読むとそうとは限らないんだよな
925 名前:デフォルトの名無しさん [2018/01/13(土) 18:19:24.76 ID:zzyV/8sb0.net] >>893 トーナメントの結果を入力するようになっているのですが既に報告用ワークシートはあるのですが入力件数が多くなりすぎて最終的にはバーコードによる入力を試みようとしています また、その報告用ワークシートは書式が決まっており並べ替えエラーチェックのマクロが既にあるので行を入れたりして関数をいれる対応ができないという状態です >>894 入力後にマクロ実行用のボタンを押して置換するような想定でした エンターを押した瞬間変わるものでも大丈夫です
926 名前:デフォルトの名無しさん [2018/01/13(土) 18:35:21.45 ID:zzyV/8sb0.net] >>892 >>896 ありがとうございます 家に帰り次第試してみます >>895 今まではワークシート内から対戦選手の名前を探してきてコピーアンドペーストで対応していたのですが参加者が年々増えてきて(今年の見込みは約千人位)追い付かなくなってきたために速度向上を目的としています
927 名前:858 mailto:sage [2018/01/13(土) 18:44:45.15 ID:eGapce6A0.net] >>889 VBAに記述のあるWorksheets("Sheet1") の箇所を、 並べて比較でペアにしているシートに特定する方法が思いつかないのです。
928 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 19:03:27.44 ID:rZTV+Qsta.net] >>900 ファイル名とかシート名がランダムでないなら 固定値じゃないの? どんなファイル名か分からない、シート名か分からないってなら都度入力するしかないな。 データ形式で特定することもできるけど、 無駄な作業にしか思えない。
929 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 19:18:42.64 ID:gLbKwyK9x.net] >>898 こんな感じならどうかな 以下は、実行すると報告用シート内に含まれる選手コード全てを一気に置換する 複数の選手コードを含む場合も一発で置換できるはず 名簿にはコードの欄が空白の行がなく、名簿シートのA2セル以下に選手コードが入力されているものと仮定してる(A1は表見出し) セル値の一部が選手コードと一致する場合も置換されてしまうので、コードのみが入力されているセルの値だけを確実に置換したい場合、Replaceメソッドの引数のLookAt:=xlPart をLookAt:=xlWholeに変更してくれ Sub ReplaceCode Dim sh_list As WorkSheet '選手名簿シート Dim sh_report As WorkSheet '報告用シート Dim i As Long Set sh_list = WorkSheets("選手名簿シート") Set sh_report = WorkSheets("報告用シート") For i = 2 To sh_list.Range("A2").End("xlDown").Row sh_report.Cells.Replace What:=sh_list.Cells(i, 1).Value, Replacement:=sh_list.Cells(i, 2).Value, LookAt:=xlPart Next i End Sub
930 名前:858 mailto:sage [2018/01/13(土) 19:32:04.47 ID:eGapce6A0.net] >>901 ファイルのフォーマットが複数あるので、 事前にファイル名とシート名を規定できないのです。 なので、せめてペアにしたファイル同士が特定できれば、 ファイルとシートを選択する手間が省けると思ったのですが・・・ 3つ以上開けなくなるけど、workbooksからマクロブックを除外した先頭2つを比較する方法で考えてみます。
931 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 19:36:48.93 ID:6HVsHBKb0.net] >>903 それは運用を変えよう。機械的に処理するなら人間側が合わせる必要がある。 手動で命名規則に沿うか、命名自体を自動的にして人間が意識しないようにするか。
932 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 23:03:28.12 ID:aJN0Dby50.net] エクセル2010でCSVファイルを開いた場合、 UTF8やshiftjisを自動で判定して表示してくれますが、 この時に判定された文字コードを取得する方法はありますか。 用途は、外部データの取り込みでCSVを開きなおすための文字コードの特定です。
933 名前:デフォルトの名無しさん [2018/01/13(土) 23:14:29.83 ID:odSwvUdp0.net] >>905 application.nkf
934 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 23:28:32.80 ID:aJN0Dby50.net] >>906 ありがとうございます。 試してみます。
935 名前:デフォルトの名無しさん mailto:sage [2018/01/14(日) 06:58:25.18 ID:UVUQYwWb0.net] >>907 いいってことよ(´・ω・`)b
936 名前:デフォルトの名無しさん [2018/01/15(月) 01:08:16.65 ID:Zqan8uZj0.net] >>902 実行時エラー13 型が一致しませんとなっていて For~の行でエラーを出していて止まるみたいです あと報告シートが選手の強さ別に複数に分かれているのですが今選手コードの入力したシート(つまりいま開いているマクロ実行用のボタンを押したシート)を処理したいという場合どうするとよいのか教えていただけると助かります
937 名前:897 mailto:sage [2018/01/15(月) 01:48:08.96 ID:ubg4QImpx.net] >>909 エラーの出たコードを転載して見せてもらえませんか?こちらの環境ではうまく動いているんですが、私がコードを転載したときにミスをしたかもしれないので それから、コードはボタンマクロ(ボタン名_Clickのような名前のプロシージャ)として各シートのシートモジュールに書いているんでしょうか?
938 名前:デフォルトの名無しさん [2018/01/15(月) 11:28:57.27 ID:thpu0oBS0.net] >>910 Sub ReplaceCode() Dim sh_list As Worksheet '選手名簿シート Dim sh_report As Worksheet '報告用シート Dim i As Long Set sh_list = Worksheets("選手名簿") Set sh_report = Worksheets("対戦結果表_A級") For i = 2 To sh_list.Range("A2").End("xlDown").Row sh_report.Cells.Replace What:=sh_list.Cells(i, 1).Value, Replacement:=sh_list.Cells(i, 2).Value, LookAt:=xlPart Next i End Sub シート作成用のコードが既にあるのですがその中のコードを流用して各シートに実行用のボタンを置く計画でした ActiveSheet.Buttons.Add(2, 1.5, 125, 18.75).Select Selection.OnAction = "CSV_SAVE" Selection.Characters.Text = Worksheets(2).Cells(1, 1).Text & "級のCSVファイル作成" With Selection.Characters(Start:=1, Length:=15).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone End With これのCSV_SAVEをReplaceCodeにしてボタンの名前と場所をかえるつもりでしたがあまりよくない方法なのでしょうか 必要であれば既にあるコードを出しますので教えてください
939 名前:デフォルトの名無しさん [2018/01/15(月) 11:58:16.00 ID:Vljo7f2q0.net] >>908 application.nkf オブジェクトが見つかりませんでした。 下記のapplicationオブジェクト内にも、nkfプロパティが見つかりません。 https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-object-excel オブジェクトの参照方法が違うのでしょうか。
940 名前:897 mailto:sage [2018/01/15(月) 23:02:33.00 ID:JvjYqsKWx.net] >>911 申し訳ない、For
941 名前:フ行でEnd("xlDown")となってるの、自分の転記ミスでした エラーの原因もこれでしょう 二重引用符なしでEnd(xlDown)と書き直して動かしてみてください [] [ここ壊れてます]
942 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 12:17:16.43 ID:SelV7zwId.net] 質問です。 ソルバーで普通は目的セルをrangeなどで指定しますが、シートのセルにアクセスせず、vba内の変数を直接ソルバーにかけてvba内だけで完結したいのですが、方法あるでしょうか?
943 名前:デフォルトの名無しさん [2018/01/17(水) 02:18:24.01 ID:x8yvrTsd0.net] >>913 うまくいきました ありがとうごさいます
944 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 12:24:27.92 ID:sSjH/Vu40.net] セルのA列にある文字列をコンボboxにaddですべて入れた後に、一文字入力する度に候補が絞られてくって出来ます? コード教えてもらえないですか?
945 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 12:31:05.83 ID:TVDu7Qf0r.net] 一文字入力する度にコンボボックスの候補を絞ればいいんとちゃうか? 知らんけど
946 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:28:17.12 ID:uuergXrf0.net] 社内に部品表があって、重複している名前を省いて部品種類一覧の表を作ろうと思ってます。 ・ネジM5 ・ネジM5 ・ナットM5 ・ナットM5 ↓ ・ネジM5 ・ナットM5 というイメージです。 自分なりに下記のマクロを組んでみました。 Dim row As Long, col As Long, D As Range col = 1 row = 1 Do Until Cells(row, col) = "" If Not Cells(row, col) = Cells(row + 1, col) Then If D Is Nothing Then Set D = Cells(row, col) Else Set D = Union(D, Cells(row, col)) End If End If row = row + 1 Loop この後レンジDをコピペするマクロです。 部品の種類が100とか200なら動いてくれますが、本来20,000件超の部品の種類があり、こちらを処理するとフリーズします。 デバックのウィンドウはユニオンのところを指定してきてるんですが、ユニオンにはまとめられる量の限界などがあるのでしょうか?
947 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:33:34.73 ID:wJgnfOTG0.net] >>918 Accessでやれ。
948 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:41:46.63 ID:CFAgCrzx0.net] >>918 ソートして重複を削除じゃダメなのか?
949 名前:デフォルトの名無しさん [2018/01/20(土) 15:03:19.74 ID:Fb/tMd6M0.net] >>918 Excel VBAでやってもいいけど、RANGEオブジェクトに溜め込むやり方よりは、素直に別シートに値をコピー、さらにそれを検索して別の値が出てきたら別シートにコピーでいいんじゃないのか? そもそもExcelのフィルタ関連の機能でもできるからVBAを使う理由がわからない。
950 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 15:06:48.01 ID:iefRLv2cp.net] >>918 dictionaryとかでだめかな?
951 名前:デフォルトの名無しさん [2018/01/20(土) 17:40:00.19 ID:91x3kJT10.net] DBMSがコンソールなんかに返した結果を Excelセルに上手く貼り付ける方法ってある?
952 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 19:41:33.47 ID:wJgnfOTG0.net] >>923 詳細忘れたけど代入する事で、そのまま貼り付けられるメソッドがあったはず。
953 名前:デフォルトの名無しさん [2018/01/20(土) 20:44:55.78 ID:Y9eKqT4m0.net] 多くは語らんけどある意味エスパーと言っておこうw
954 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 13:18:30.88 ID:+2jqUeqC0.net] >>918 ADOなら一瞬で終わる いろいろ突っ込まれているように、別の方法のが簡単だと思うけど シート名やら列名は読みかえてね Dim adocon As Object, adors As Object Set adocon = CreateObject("ADODB.Connection") Set adors = CreateObject("ADODB.Recordset") With adocon .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "Excel 12.0" .Open ThisWorkbook.Path & "\" & ThisWorkbook.Name End With Set adors = adocon.Execute("SELECT DISTINCT 部品名 FROM [部品表$]") Worksheets("部品種類一覧").Range("a1").CopyFromRecordset adors adocon.Close
955 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 15:03:53.81 ID:pRI5Eg/X0.net] >>862 だれかこれわかる人いません?
956 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 16:45:39.61 ID:WhYlNzfJM.net] >>918 下手にマクロ組むよりExcelの標準機能の重複削除を使え。 VBAとは違って並列処理できるから速度が段違い
957 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 18:35:28.14 ID:7nwc0luUa.net] 重複なしリストはいろいろやり方あるけど、標準機能使うかadoでやるかがスマートだろうね dictionaryもありだけど、fsoのやつはなんか取り回しがいまいちじゃね
958 名前:デフォルトの名無しさん [2018/01/21(日) 18:40:31.69 ID:nVuQLEta0.net] ここ初心者スレかと思ってスレタイ見なおしてしまったわw オレ以外初心者しかおらんやんw
959 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 18:41:57.84 ID:EcNkRoqM0.net] メゾット君また寂しくなって来ちゃったのか
960 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 18:57:02.81 ID:7nwc0luUa.net] .netframeworkのlistって重複削除機能なかったっけ?
961 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 20:07:47.89 ID:+2jqUeqC0.net] >>932 リストにあるかないかはわかるみたい これなら配列に突っ込んで総当たりしていくのと変わらなそう 読みやすくはなるけど Dim partsList As Object Set partsList = CreateObject("System.Collections.ArrayList") Dim partsData Set partsData = Range("データの列") Dim parts For Each parts In partsData If Not partsList.Contains(parts.Value) Then partsList.Add parts.Value End If Next 出力処理省略
962 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 20:16:12.20 ID:rQmHQ7OM0.net] >>929 > dictionaryもありだけど、fsoのやつはなんか取り回しがいまいちじゃね 意味不明 Dictionaryとfsoになんの関係があるんだ?
963 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 21:00:25.33 ID:xouI7cQH0.net] >>918 とりま、Union関数は遅いから絶対に使うな、それだけ セル数がちょっと増えると簡単にフリーズする 普通に配列とかに入れてった方がいい
964 名前:デフォルトの名無しさん [2018/01/21(日) 21:12:55.02 ID:nVuQLEta0.net] >>935 とりま、なんでいきなりそれを言いだしたのかよく分からんが 遅いのはお前のプログラムが下手糞なだけ 脈絡のない下手糞自慢ごくろうさん
965 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 21:38:18.50 ID:Ycn/1JW20.net] require 'set' File.readlines("ファイル名").to_set.map { |item| puts item } Ruby の集合を使うと、以下のような行区切りのファイルを、 あ い あ あ う い 以下のような結果にできる。 ただし、集合にはデフォルトで、順番は無いので、 順番が必要なら、お好みの基準でソートする あ い う
966 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 21:51:29.18 ID:EcNkRoqM0.net] 毎度思うんだが、Rubyって他言語のスレにまで布教しに来なきゃならないほど不人気なのか?
967 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 22:19:18.53 ID:Ycn/1JW20.net] Ruby だと、テキスト処理が、めちゃめちゃ簡単に作れる 他の言語のように、悪戦苦闘しない
968 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 22:23:07.58 ID:+2jqUeqC0.net] どうせなら引っ越し準備も兼ねてPythonにしようゼ
969 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 23:23:35.81 ID:ppfN03med.net] 単純に2万個のセルをUnionするだけで1時間かかる Sub aaa() Debug.Print Time Dim u As Range Set u = Cells(1, 1) For r = 3 To 40000 Step 2 Set u = Union(u, Cells(r, 1)) Next Debug.Print Time End Sub
970 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 23:45:19.36 ID:Ycn/1JW20.net] 2万個のデータは、テキストデータだけなら、1MB ぐらいだろ >>937 のRuby でのテキスト処理なら、1秒ぐらいじゃないか?
971 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 00:04:49.43 ID:R+7srG110.net] >>942 空気読んでね
972 名前:アこはテキスト処理の質問スレじゃなくて Excel VBAの質問スレだから [] [ここ壊れてます]
973 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 01:20:01.78 ID:pYe1Cwj70.net] そんなに時間が掛かるのなら、一旦データをエクスポートして、 データをテキスト処理してから、インポートして戻せば? たかが、2万個のデータで、1時間は現実的ではない そんなに時間が掛かっても、どうしても、VBA でやりたいのか?
974 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 01:43:29.00 ID:zmIcszTc0.net] あくまでUnionを使った場合であって高速に処理する方法はいくらでもあるからなぁ。 それに仕事でVBA使う環境だと他社との協調も考えなきゃいけないからRubyインストールする方がよっぽど非現実的だし。 まぁ、たぶんおちょくってるつもりなんだろうけど、そもそもVBA以外の環境がないって前提のスレだから、 Rubyマンの煽りが煽りになっていないっていう・・・。
975 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 04:08:31.22 ID:Xp9Ai2fT0.net] 重複の削除はワークシートでやった方がてっとり早いと思う
976 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 04:38:17.99 ID:AE7SVx7N0.net] >>945 > そもそもVBA以外の環境がないって前提のスレだから そんな前提で質問に来る人もいるだろうけど、 「最適解」を求めている人が、とりあえずVBAだとどうなるか、と思って質問する場合もあるでしょ だから、質問者が「全体にVBA以外はダメ」って制限をかけていない限りは、 上でも、ACCESSを進めている人もいたけど、実用面から考えた回答も質問者の利益になると思うんだけど (質問者がそう思っていても、何も知らないからそう思ってるってパターンすらあり得るかな)
977 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 05:56:27.49 ID:zmIcszTc0.net] >>947 Excel VBA質問スレでの「実用面」は、一般的な企業向けWindows PC(Office製品入り)で出来る事に制限されると思うけど。 それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。 だいたい他の言語に興味があるなら、その言語のスレで質問すりゃいいわけだし、 どんな自己弁護をしたところで特定言語のスレで他言語の話をする理由にはならないよ。 せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、 Rubyスレに誘導して、そちらで話を展開すべきだね。
978 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 08:37:35.39 ID:AE7SVx7N0.net] >>948 > それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。 リアルでも、相手に聞きもせずに勝手にそんな縛りをかけて要件定義する人はいないと思うよ > せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、 > Rubyスレに誘導して、そちらで話を展開すべきだね。 環境を聞くのは勿論ありだが、「○○だとより簡単にできるよ」ってこちらから言う事に何の問題があるのか? 今ある環境内で必ず実現する必要があるなら別だが、そうでない場合もよくあることでしょ ま、いずれにせよ、何も聞かないうちに勝手に「○○に違いない」って決めつけるのは、 要件定義では一番しちゃいけないことだよ
979 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 10:06:54.55 ID:zmIcszTc0.net] >>949 仕事している風を装いたいんだろうけど、明らかに経験が無いの丸出しなんだよな・・・。 そもそもVBAスレでRubyの話を出してくる事自体が問題なんだよ。 君が問題になっているのは要件定義の話ではなく開発環境の話だ。 明確な線引きをするなら、このスレではxlsmに記録し、特別な準備なしに実行できるものでなければ、何であれ許容範囲外だ。
980 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 10:12:50.46 ID:JFwvghX1M.net] またそうやって明文化されてもいない自分ルールを展開していくー
981 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 10:23:32.81 ID:zmIcszTc0.net] 明文化されてはいないけど、過去から今までのスレでの反応を見る限りは、 だいたいxlsmファイル単体でマクロの実行が補完できるかどうかが拒絶反応の出る出ないを分けてるよ。 ただ個別にマクロが記録された二つ以上のファイルを連携させる場合の話もあるから「xlsmに記録し、準備なしに実行可能な」と定義しただけ。 押しつけるつもりはないけど、この定義で問題が無ければテンプレに加えてキチ避けしてほしいくらい。
982 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 11:30:49.09 ID:r0T2WJT6a.net] >>934 ごめんscriptingRuntimeのやつ、の間違いだ
983 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 11:33:07.33 ID:y0jssaARd.net] VBAをメインとして他言語も補助的に使う。 それなりにあると思う
984 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 15:12:56.07 ID:EwN8a0pa0.net] 同じ現象が起きるようにできるだけ簡単なコードを用意しました まっさらなxlsmにUserForm1を挿入し、TextBox1とTextBox2を横に並べます UserForm1モジュールに下記のようにコードを記述します Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 39 Then With TextBox2 .SetFocus .SelStart = 0 End With End If End Sub UserForm1を呼んだ後、TextBox2にabと記入します このとき、TextBox1からTextBox2に矢印キー右でうつろうとするとaの前ではなくaとbの間にカーソルが来てしまいます。 どうすればaの前にカーソルが来るようになりますか?もちろんabは例示にすぎずいろんな文字列が入ります よろしくお願いします
985 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 15:25:33.05 ID:EwN8a0pa0.net] >>955 ですけど、KeyCode=40、つまり矢印キー下にセッティングして TextBox1から2に移ると頭にカーソルきますね ということは、入力した矢印キー右がTextBox2に移ったあとも生きててその影響が出てるってことですかね まぁ原因分かっても解決方法が分からないのですが
986 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 16:37:43.27 ID:DgxtyBXU0.net] 試していないけれど With TextBox2 の前に KeyCode = 0 を入れたらどう
987 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 17:07:09.72 ID:+/nnDvsjM.net] >>954 VBAでは書きにくい or 実行速度がめちゃ遅い かつ その言語なら簡単に書ける or 実行速度が速い ならありうると思う なのでAccessとかADOならまだわかるけどRubyはないな
988 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 22:49:33.42 ID:EwN8a0pa0.net] >>957 しゅごい・・・できました ありがとうございました
989 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 10:46:16.37 ID:QE61Ho6h0.net] 。と。の間に入ってる文字を全部同じ文字に置換したい場合ってどうすればいいでしょうか? 。。 →。ccc。 。akok。 →。ccc。 。3293i9ia。 →。ccc。 みたいな感じです
990 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 11:16:56.30 ID:QE61Ho6h0.net] すいません数式の中の。と。の間の文字を置換でした
991 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 12:30:55.33 ID:4OtF4psx0.net] 数式の中のってのがよくわかんないから実際の数式を書いてくれ
992 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 13:09:34.71 ID:QE61Ho6h0.net] こういう事がやりたいって感じです わかりづらくてすいません =123456789(この9桁の数字はランダム) → =123ccc789 =123456789(この9桁の数字はランダム) → =12ccc3456789
993 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 13:24:33.86 ID:96uZKYcfd.net] >>963 。の話はどこへいったんだ?
994 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 13:52:49.81 ID:QE61Ho6h0.net] いやこっちの方がわかりやすいかなとw
995 名前:デフォルトの名無しさん [2018/01/24(水) 14:37:17.59 ID:626EYBnb0.net] 2週間くらい前から、 フォームコントロールのボタンを配置すると エクセルファイルの起動が いつもの起動時間の5倍くらいかかる様になり困っています。 ちなみに、新規のファイルでも同じ現象になり、 他のパソコンでも同じ現象になっています。 どなたか、解決方法を知らないでしょうか? 今使っている環境は Windows 10、バージョン 1709 Excel2016 バージョン 1712 です。
996 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 14:47:11.88 ID:LHEOU22dM.net] >>965 草生やしてんじゃねえよ真面目に質問しろ
997 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 16:00:42.34 ID:eVK1iV6m0.net] w
998 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 17:24:26.92 ID:QE61Ho6h0.net] なんでwなんて打ったのか・・・反省してます
999 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 17:48:11.23 ID:cTEKAhE2M.net] >>969 VBA 正規表現 置換 でググれ
1000 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 19:49:39.94 ID:4OtF4psx0.net] >>963 みんなこれでわかるの? 上と下に規則性があるように見えないんだが 上は値を置き換えてて、下は挿入してるよね
1001 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 20:02:49.35 ID:XHxrtrwiM.net] わかりません
1002 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 21:10:53.71 ID:6b5evSsja.net] >>918 そのテキストファイルがCSVファイルみたいにカンマ区切りで ヘッダとして項目名が付いてて項目名に重複が無ければ そのファイルにSQLぶん投げて結果セット取ってこれるんだけどなぁ
1003 名前:デフォルトの名無しさん [2018/01/24(水) 21:14:29.60 .net] 地道にループぶん回してFomulaLocalとInStrとMidしてちょ
1004 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 21:29:25.29 ID:l13g0WQj0.net] いや、ループするにしても VbScriptingDictionary使うかCollection使って 値をキーとして登録して 同じキーがあれば無視、無ければ登録追加で 最後にその取っておいた内容を 展開するようにすればそこそこのレスポンスで 行けるんじゃないかな。 SQLで行けるならそれが最速だとは思うけど。
1005 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 19:41:38.87 ID:x0ph6Erf0.net] ちゃんとしたDBMSならともかく、エクセル表にSQL投げて実行速度が速いとか考えられんけど
1006 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 21:14:11.87 ID:xVw6nJl50.net] ADOだとそれなりに早いイメージなんだけど 実際はどうなのかね 誰か検証していてもよさそうだが
1007 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 22:04:13.28 ID:BYFi0PM80.net] 一項目だけの比較なんかだとVBAでやるのと変わらないけど、色々と条件が増えていくとSQLの方が速度が落ちにくい。 あと他の誰かが見ることも考慮すると、SQLで見えるようにしておいた方が分かりやすい。 ただExcelでSQLというのは絶望的に使いづらい。
1008 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 22:28:41.91 ID:3kW0jqmr0.net] UPDATEはできるけどDELETEができないんだっけ?
1009 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 22:46:48.37 ID:2HN+h3+60.net] できなくてもやらなきゃいけない時があるんだよ男にはな
1010 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 10:16:15.47 ID:i1V2CYFLa.net] エクセルのテーブル機能ってどうなんよ あんまり使わんから馴染みないんだけどsql使いやすくなったりせんの?
1011 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 14:00:22.47 ID:ewTTza6/0.net] >>980 猫もだよ 穴に逃げた虫を懸命に取ろうとしている
1012 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 19:52:38.86 ID:uoysLyn50.net] こういうのを見ると 早くPython導入して欲しいって思うよな アンケート取られてたからちょっと入門見たけど結構面白いわアレ こういった集約的なことに関してもずっと楽に作れそう VBやC#でも後の方で覚えることになるラムダ式や イテレーターとかごく基本的な当たり前のこととして いきなり最初から出てくるし
1013 名前:デフォルトの名無しさん [2018/01/26(金) 20:26:28.69 ID:Vo+OzJVu0.net] VBAですら暴走しまくりのお前らにpythonなんか与えたら社会を困らす力作マクロ()がますます増えちゃうじゃんかw
1014 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 20:36:36.35 ID:VXa7znFt0.net] コードをまともに読み書き出来ないメゾット君が心配するような事でもないけどな
1015 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 22:00:17.36 ID:mlDN6tJ0d.net] VBAを廃止なんてできるわけないからPythonと入り乱れたプログラムになるんだろーか?
1016 名前:デフォルトの名無しさん [2018/01/26(金) 22:15:41.07 ID:pXxYwYu40.net] 職場の環境じゃVBAくらいしか選択肢がない
1017 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 22:23:52.83 ID:Ji/nweCn0.net] >>987 https://forest.watch.impress.co.jp/docs/serial/yajiuma/1097447.html
1018 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 22:40:51.06 ID:VXa7znFt0.net] 影響するのは最新バージョンだけだろうし、Excel版Pythonの初期バージョンだと使い物にならなかったり参考文献が少なかったりの問題で、 本格的に使われるようになるにしても五年以上かかりそう。そしてそこからさらに数年経たないと、そのバージョン使う会社が出てこなさそう。 っていうか今までもVBAをVB.Netへ移行させようとして失敗してたらしいし、AIブームに乗じた一時的なもんで実現しないんじゃないの。
1019 名前:デフォルトの名無しさん [2018/01/27(土) 00:23:34.40 .net] Pythonって起動にめっちゃ時間がかかるから(5秒くらい) 普段使いのちょっとしたツール作るには使い物にならないという印象
1020 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 00:36:59.48 ID:Xe+uGT7T0.net] 多分Python載ったとしてもしばらくはVBAと共存だろうとは思う。 勉強嫌いな爺さん達にはPythonが来るのは驚異以外の何物でもないかも知れないけど 導入されたら少なからず徐々に普及し始める。 なぁに、EXCELの中のコンパクトに纏まった世界の話だし 勉強するにはうってつけだと思う。 少なくとも今後のVBAよりは次に繋がるよ。
1021 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 01:00:30.81 ID:/Onm91iZa.net] 今まで言語を変えるような具体的な話は出てなかったからなぁ まさかObject指向言語じゃなくていきなり関数型言語が来るとはなぁ
1022 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 01:49:19.54 ID:mMQhkopa0.net] PythonはAIブームの収束と共に消えていきそうな雰囲気だから将来性っていうと疑問が・・・。
1023 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 08:00:53.71 ID:lEBNH3fnr.net] ツッコミどころ多すぎだけどとりあえずw オマエがギモンを感じるなw
1024 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 08:16:06.57 ID:ZgMGVzLO0.net] >>990 > Pythonって起動にめっちゃ時間がかかるから(5秒くらい) さすがにPC買い換えようよ...
1025 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 11:01:00.79 ID:Nudrd5lRF.net] Excel Python 質問スレ mevius.2ch.net/test/read.cgi/tech/1517018055/
1026 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 14:29:11.91 ID:arqbrGPuM.net] VBAがくっそ使えない言語だから普通はpython大歓迎でしょ…
1027 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 15:20:10.85 ID:cbFXqoc10.net] VBA嫌いじゃないけど、Phythonの方が明らかにエレガントなコーディングできそうだから歓迎しかないわ VBAは参照設定したら使える程度のものになるんじゃないか?
1028 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 15:44:26.54 ID:+7hAxrT3a.net] どんな言語だってできる奴はできる。 VBAが駄目だとか言う奴に限って碌なコード書けない奴ばかりなんだよなあ。
1029 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 16:05:43.43 ID:arqbrGPuM.net] こんな書いててストレスマッハの言語はないからな まあ全員パイソンいくでしょw
1030 名前:デフォルトの名無しさん [2018/01/27(土) 16:11:26.72 ID:3QIsbpwxM.net] VBA→javascript→Pythonの順に覚えたけど何がそんなにストレスなのかよく分からん
1031 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 17:39:06.57 ID:Xe+uGT7T0.net] それより次スレは?
1032 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 19:59:27.66 ID:QIG/4o8/0.net] >>998 パイソンやとスレで相談したいときに 質問スレではインデント崩れて悲惨なことになってるな
1033 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 20:30:03.5
] [ここ壊れてます]
1034 名前:6 ID:Xe+uGT7T0.net mailto: とりあえず次スレ立てておいた Excel VBA 質問スレ Part52 http://mevius.2ch.net/test/read.cgi/tech/1517052305/ >>1003 Pythonはスコープがインデントで決められているからね インデントの重みが他の言語のそれとは全く違う 代わりにEnd IfやEnd Subみたいなものがない [] [ここ壊れてます]
1035 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 22:07:33.55 ID:845Tmzax0.net] >>1004 乙 1000ゲット
1036 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 80日 10時間 41分 3秒
1037 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています