Excel VBA 質問スレ Part59
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part58 https://mevius.5ch.net/test/read.cgi/tech/1542577644/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured >>5 CodeModuleプロパティでなんかできそうだけど使ったことないからわかんね エクセルのシートやセルのオブジェクトにどんなメソッドやプロパティがあるのか見れるところないですか >>12 のダウンロードした回数多くないか? 有用なツールだと認められた証だろう。作った人は自慢していいよ このスレの人ってやっぱりプログラマーが多いんですか? それなりにVBA使えるようになった事務職なんですが、転職を考えています 想像してはいたんですが、VBAで職探しするとプログラマーばっかりですね VBA活かせる仕事ってやっぱりプログラマーになっちゃうんですかね >>51 プログラマの定義から自明だろう VBAのスキルだけで仕事するってことはVBAでマクロ作ること自体を仕事にするってことだろ? それは即ちプログラマに他ならない 嫌なら他のスキルを身につけた上でその補助道具としてVBAを使うことを考えなさい あとはIT業界でプログラマ以外で入りやすいのはシステムオペレータやコールセンター VBAを使う機会は少ないかもしれないけどVBAを習得できる程度の頭があるならそれなりに責任たある立場(バイトリーダーくらいを想像すればいい)にはなれるんじゃないかな Excel エンジニアから、ステップアップしてプログラマーになった人は、たいてい、Ruby on Rails ! まず、Ruby・Sinatra から、web フレームワークを始める YouTube にも、そういう成功した人たちの動画がある >>52 経理財務畑で10年働いてるので、その補佐としてVBA使ってる現状です VBA楽しいので、そればっかりの仕事はしたくないんです たぶん嫌になっちゃうので。 なのでIT業界に行きたいわけじゃないんです でも、VBAで探すとITばっかりだなーって悩んでるんです VBAは習得にかかる時間は他の言語覚えるのと同じくらい? それとも簡単? >>57 同じレベルを求めるなら同じ でもVBAは自称「VBAできます(キリッ」のレベルが他言語比で大幅に低いから、 人前で習得したと言っていいレベルに達するまでの時間は他言語よりずっと短い for i for j for k for l if cells(i,j)=cells(k,l) then m=m+1 cells(m,1)=cells(k,l) end if next next next next できました! >>60 エラー処理(例外処理)が緩すぎる やり直し >>56 仕事を効率化するシステムはある程度自分で作るのが当たり前の時代が来る(かもしれない)から IT業界でなくてもプログラミングは必須になる(かも略 ただしそのツールの主流はVBAじゃないだろうね いろんなツールや他言語も覚えて他人の仕事をどんどん奪ってください。 そうすれば時代の流れを加速することになるのでヒーローになれます。 MSがExcelにPython載せるっつってたから 君が卒業して社会に出る頃にはVBAは消えてるかも知れない >>64 まず型はいらない。 コマンドや関数はフローチャートの図形みたいな視覚化とパラメータで作成。 論理エラー以外のエラーは出ない仕組み。 やろうとすればいくらでもできるんじゃね? >>66 そんな軟弱な それじゃ小学生向けのプログラミング教室と変わらないじゃん >>68 一般の個人がやるならこのくらいが普通。 HTML手書きの敷居を下げたホームページビルダーだってそうだろ。 プログラムがCUIっていうのに違和感を持つべきだと思う。 >>69 そそ、それをより深くしてさらに汎用化させた感じ >>66 やろうとすればというかもうとっくに先人たちが取り組んで諦めた分野だよ 学生の頃に配線型のプログラミング言語を使ったことあるけど難しすぎて習得を諦めた 先人たちの時代には難しかっただろう しかし今のPC環境ならグラフィカルなプログラミングも実用化できるんじゃね >>13 さんもう見てないかな 自分で使ってみたけどなんか違う・・・と思って考えてみたら 問題のシャッフル出題(各問1回だけシャッフルして出題)が足りないという結論に バグもつぶしたし、まだ見てるならレスください すみません、こういうのは出来ますか。 How are you? I’m looking forward to see you. を How are you? I’m looking forward to see you. になおす。 要は、中途半端な改行がある文を、一行にまとめる。 >>74 みんなそんなに全力でテキストベースのプログラミングを避けたいのかねえ? 使いこなせば強力な武器になるとは思わんのか? >>76 改行をなくすだけなら比較的簡単にできる 適切な位置で改行しろってなら、適切な位置を事前に完全に定義すればまぁできる >>77 おれは別に避けたいとは思ってないしその必要もないけど テキスト以外のプログラミングには従来のプログラミング言語にない可能性だってあるしな DOSはDOSで使いやすかったと思う。 Windows出たときいらねーべって思ってたけど今思うと3.1はやっぱりいらない。 >>78 76です。 すみません。それでは、 .で改行できるようにお願い致します。 >>80 一旦改行を全て削除して、そのあとでピリオド、クエスチョンマーク、エクスクラメーションマークで改行すればいいんでは。 >>81 改行を削除できますか。 仕事で、大量の英文を整理したいので困ってます。 線つなぐやつはサブルーチンが正体不明のアイコンになるからものすごくわかりにくい 逆にわかりやすいプログラムを描くには高度なアイコンデザインセンスが必要ということだ そんなの天才にしか使いこなせない >>82 もうVBA関係なくなっちゃうけど、普通のエディタ使って置換機能を使えばいいだけでは。 >>84 セル内の文字列を対象にしてると思うからエディタでは無理では?分からないから適当に言うんだけど。 >>80 質問はうけつけん Sub RemoveCRLF() Dim target As Range Dim str As String Set target = Sheet1.Range("A1") str = target.Value str = Replace(str, vbCr, "") str = Replace(str, vbLf, "") str = Replace(str, ".", "." & vbNewLine) target.Value = str End Sub >>76 あまりいけてないけど、ぼくも考えた Dim str As String str = Range("A1") Dim re As Object Set re = CreateObject("VBScript.RegExp") re.Global = True re.Pattern = "[\r\n]" str = re.Replace(str, "") re.Pattern = " +" str = re.Replace(str, " ") re.Pattern = "([?.]) *" str = re.Replace(str, "$1" & vbLf) Range("A2") = str >>75 最新版は5ですよね?使ってみましたがオブジェクトエラーが起きてどこで停止しているかみてみると、ソート処理時に停止する。 そこで4_2をベースにこちらでカスタマイズして、ボタン1つでセル内の文字列をシャッフルするコードをネットから拾ってきました。 ついでに縦横の切り替えもボタンで実現してます。 やりていことこ実現できているので満足です そうでしたか、なんかすみません じゃ本当に終わります。 Python などの形態素解析で、文末でも判定すれば? >>84 例えば?メモ帳とか? 改行を無くす置換はありますか? >>92 ありがとうございます。一つのセルに最大どんだけテキスト貼れるかですね >>92 cntl+jか。知らなかった。ほかのワードとかでも使えるかな セルを指定する時とか”A1”とかちまちま書くのが普通? めんどくさいんだけどそんなもの? >>95 状況とやりたいことによる 範囲指定する書き方も出来るし、変数で楽できる場合もある >>93 Excelと関係ない英文を整形したいだけならテキストエディタを使った方が早いぞ せめてWordにしとけ 「何の条件」で「何を」「どのようにしたいか」の中で「何の条件で」が出てないな 「何を」「どのようにしたいか」も一部の条件しか出てない気がする 連想ゲームじゃないんだから質問はちゃんとかけよ >>76 この質問は Excelの枠に配置で、折り返して全体を表示するに 以下の改行のない文を貼り付けた時に How are you? I’m looking forward to see you. セルの幅に合う位置で改行されるのを思いの位置で改行したい ってことだろ、思いの位置が明文化されないとな 例えば英文であるかわからんが「...」みたいな文とか「!!」みたいなとかもありそうだしな >>95 あと以下のようにしておくと面倒でなくなるよ cns_COL_ID = “A” Range(cns_COL_ID & 1) = “ID” >>95 貼り付けられたイベントで処理するのも普通だけどな 位置は分かるから、そのセル・レンジを処理する Private Sub Worksheet_Change(ByVal Target As Range) まあ、Changeイベントで If Application.CutCopyMode = xlCopy Then End if コピーされた場合「Range」に対して処理を書くんだな セル上でドラッグドロップしたら、それでプログラムが動くようなことってできますか たとえば、縦1列に20個のデータが入っていて、その1つを別の場所に ドラッグドロップすると順番が入れ替わるようにするとか >>104 こうかな Sub Worksheet_change(ByVal Target As Range) if target.column = 貼り付けた列番号 then 配列に突っ込む 配列をソートする 配列をセルに書き込む End Sub >>106 あとApplication.Enableevents = Falseしないと配列をセルに書く時にWorksheet_changeが起きて無限ループするから気を付けて >>104 それって、切取りと切り取ったセルの挿入のことじゃない >>104 シフト押しながらドラッグするだけやろ。 テーブル定義ならシフトすら必要ない。 既存の機能を自力で作ってどうするんや >>94 置換前にcntl+jと入れると、置換ボタンが押せない。 >>96 >>97>>101 >>102 ありがとう >>101 これはなぜ楽になるの? >>113 楽というかマナー 意味の分かる定数で定義することで他人がプログラムを追わなくても理解できるようになる プロパティ使ったほうが定数よりずっとわかりやすいよ 決まりきったセル(範囲)参照する時は名前定義なりテーブル化した方がいいと思うけどな vba初心者です。 マウスイベントやスリープなどのapi を使って 会社で使うツールを半自動化してますが、 こういうアナログな方法ではなく、 マウスでクリックしなくてもツールがアクティブになったり、 スリープではなく画面が遷移したのを読み取って次の命令を実行してくれるような ものを作るにはどういう学問を学べばいいですか? >>117 UI Automation ただ色々アレで結局Win32API併用することになることが多いけど 自作したdllファイルに文字列を投げて配列を受け取りたい場合 Public Declare Function 〇〇 Lib "△△" Alias "□□" (string path)As string() 〇 自分で付ける関数名?? △ dllファイルの場所フルパス?? □ dllファイル内の何か? それぞれ何を指すんですか? ちなみにこれでも似たような事ができるんですか? Dim tarApp As Variant Set tarApp = CreateObject(“◎◎“) tarApp.Documents.Open FileName:="〇〇" Set wdApp = Nothing >>121 まあ、気楽に回答しておく >〇 自分で付ける関数名?? その通り >△ dllファイルの場所フルパス?? Pathが通ってればフルパスでなくてもよい >□ dllファイル内の何か? 別名宣言できる・・・まあ、調べろ >ちなみにこれでも似たような事ができるんですか? >Dim tarApp As Variant >Set tarApp = CreateObject(“◎◎“) > tarApp.Documents.Open FileName:="〇〇" >Set wdApp = Nothing 書いている意味が理解できてないだろう、Office系のソフトはちゃんとしたルールで作られてるが こんなこと気にする前に、有効なDllを作ってみろよ 尚、理解できてないことが丸わかり >>123 まあ、間違ってるんだろそれだけ ソースを出さなきゃ何もないよ イベント鳥杉ってよくあるからな 有効な手段は、護摩をたけ、できるだけ激しく火事には気を付けろ たとえば、A1からC50までデータがあってA列をキーにソートしたいのですが、 途中たとえば、10行、15行、20−25行は抜かしたいのです。 これらにはコメントや他のものが入ってるので でもそれらを抜かして全体でソートしたいのですが、Unionで繋いでやったら複数のレンジは出来ないみたいな エラーを返されました 何かいい方法はないでしょうか 例えば、画面表示は止めて、メモリ上で行を移動させてソートする行をまとめてからソートして、 また行をもとに移動させてから、画面上に結果を表示とか、出来ると可能性があると思うのですが >>126 if i = 対象行 then 行入替え end if とかでいいんじゃね? >>126 行を非表示にしたら対象から外してくれんかな…(試してない) >>121 〇 自分で任意に付ける関数名 □ dllがエクスポートしている関数名 dllってよくわかんないだけどvbsのexecuteglobalみたいな感じ? >>129 マジかあ。 やってみた。 出来てる なんだよ、プログラム作っっちゃった。 ソートしないところを一旦別に移して圧縮してソートしてから 下に戻すってやつ なんだよ、 この2時間返して w >>132 まあ、普通にデータはテーブルでもてば良いだけだろ 整形は別シートででーたをさんしょう >>131 外部にライブラリーなどを持たすんだから Include の方が近いだろ よろしくお願いいたします。 VBAで、半角カナ文字列を与えると、その文字列の中にある、 ァィゥェォャュョッ などの小さい字をアイウエオヤユヨツなどの大きい字(半角カナ)に変換して返す functionを作りたいのですが、どう書いていいのかわかりません。 ひとつずつ、ァをアに変換、ィをイに変換、のように書くしかありませんか? まとめて書く方法ってあるのでしょうか? Ruby のNKF とか、文字列.tr とか、正規表現とか 60項目7万件のjsonデータ読んで保存した。 開いたらモジュールとフォームが破損って何なんだよ。うう吐きそうだ。 10Gじゃメモリたりなかったのか?いや、それならそうメッセージがでるはず。 まさかこんなんでコード飛ぶとは思わなかったからバックアップは取ってない。 10分おきの自動バックアップのデータはあったけどデータ取るのに2日かかったからとっくに消えてる。 もう作る気おきない。 参った。 >>137 ざまあ そういうのはCSVを介するのが定石だろう >>135 dictionaryオブジェクトで連想配列作れば? Dim myDic As Object Set myDic = CreateObject("Scripting.Dictionary") myDic.Add "ァ", "ア" myDic.Add "ィ", "イ" myDic.Add "ゥ", "ウ" Dim str As String str = myDic.Item("ァ") #<--ここに参照したい文字を渡す MsgBox str, vbInformation https://www.sejuku.net/blog/29736 動くかわからんけどお試しあれ。 >>135 あんまり綺麗じゃないけど Function kanacaps(s1) As String For i = 1 To Len(s1) c = Mid(s1, i, 1) If "ァ" <= c And c <= "ッ" Then Select Case c Case "ァ" To "ォ" s = 10 Case "ャ" To "ョ" s = 40 Case Else s = 19 End Select Mid(s1, i) = Ch r(As c(c) + s) End If Next kanacaps = s1 End Function 一部の文字列関数が、なぜか5ちゃんねる全体のNGワードになってるんで、わざとスペースを入れてある Ruby では、 str = "ァィゥェォャュョッあ" puts str.tr( "ァィゥェォャュョッ", "アイウエオヤユヨツ" ) #=> アイウエオヤユヨツあ もっとシンプルなのができた Function kanacaps(s1) As String t = "アイウエオヤユヨツ" For i = 1 To Len(s1) c = Mid(s1, i, 1) If "ァ" <= c And c <= "ッ" Then Mid(s1, i) = Mid(t, A sc(c) - 166, 1) End If Next kanacaps = s1 End Function ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる