19/02/10 09:22:45.87 adWOvpgi0.net
JScriptでエクセルやってます
いろいろ出来るようになったのですが、VBAで選択した範囲の右下をとるときに、
y = Selection.Row + Selection.Rows.Count - 1
x = Selection.Column + Selection.Columns.Count - 1
としますが、JScripで、
var sheet = book.Worksheets( 1 );
var y = sheet.Selection.Row
とかしてもありませんと怒られます。どうしたらいいでしょうか
また、いろいろとググっているのですが、JScriptで使えるエクセル専用のオブジェクトやプロパティを
調べられるサイトってないのでしょうか。なかなか見つけられないのですがわかる方、教えてください
VBAならいろいろあるようですが
16:デフォルトの名無しさん
19/02/10 09:40:27.91 7rlN1EyT0.net
>>14
そこだけVBSにするとか。
17:デフォルトの名無しさん
19/02/10 09:54:47.81 px4mCHlG0.net
>>14
JScriptは良くわからんが・・Javaは結構したけど
見当違いなら申し訳ないが
既にExcelが起動していて、シート1が選択され
範囲が選択されている状況で、JScriptを動かしているんで良いですよね
18:デフォルトの名無しさん
19/02/10 10:14:14.92 px4mCHlG0.net
>>5
単にプロシージャ名の変数を宣言しておき
各プロシージャ実行時にプロシージャ名に名前をセットして実行
エラー表示でプロシージャ名の変数を表示するだけでは
19:デフォルトの名無しさん
19/02/10 10:29:08.47 D1+mLGbSx.net
>>14
var sheet = book.Worksheets(1);
sheet.Activate;
var selected = book.Application.Selection;
var x = selected.Row + selected.Rows.Count - 1;
var y = selected.Column + selected.Columns.Count - 1;
でいけるんじゃないかな
試してないから間違ってたらごめん
20:デフォルトの名無しさん
19/02/10 10:48:51.96 px4mCHlG0.net
>>8
昔は、メモリーの領域を分け合って使ってたけど
いまわ全てオブジェクトと思え
エクセルは色々このオブジェクトの使い方が説明されていて
機能も多い
いやならすべて作ればとなるが、所詮何も出来ないだろ
21:デフォルトの名無しさん
19/02/10 10:52:53.82 px4mCHlG0.net
>>17
これは間違いだな、サブルーチンから戻った時を考えてない
サブルーチンでは、元の名前を保存しておき元に戻す処理が必要になるが
こんなの今時やらないな
22:デフォルトの名無しさん
19/02/10 10:57:18.71 px4mCHlG0.net
したがって、プロシージャ名は配列で宣言し、サブルーチンの時の処理が必要になるが
これは、システムが管理しているのを使うべきだな、すまない
23:デフォルトの名無しさん
19/02/10 11:29:32.47 adWOvpgi0.net
>>18
ありがとうございます!
それで動きました。 どこでそういうのは調べるのでしょうか。 なかなかググってもわかりません
>>15
最初にJScriptを始めたとき、ネットでJScriptの方が初心者向けにエクセルの操作とかわかりやすい記述が
見つかったので、JScriptを始めたのですが、VBSだと、VBAとぼとんど同じプロパティで同じことができますか?
そうなら、VBSに移ろうかな
24:デフォルトの名無しさん
19/02/10 12:19:38.78 px4mCHlG0.net
まあなんだな、質問して回答を実行してできたことが答えじゃなくて
何故できなくて、何で出来たのが答えなんだけどな
25:デフォルトの名無しさん
19/02/10 12:35:46.47 YUFMtInCx.net
>>22
今回の質問はエクセルのオブジェクトモデルに忠実に従えば解決するものだよ
VBS含め他のどんな言語を選択しようが、そのあたりの事情は変わらない
具体的には、今回はSelectionへのアクセス方法がおかしかったわけで、
MSDNリファレンスのプロパティ一覧を見たり、VBEのオブジェクトブラウザでプロパティを検索したりすれば、
Worksheetオブジェクトには現在の選択範囲へのアクセスを提供するSelectionプロパティがないことや、
SelectionプロパティはApplicationオブジェクトのメンバとして実装されていることが分かる
26:デフォルトの名無しさん
19/02/10 12:45:32.26 7rlN1EyT0.net
>>22
無理に移るんじゃなくて、併用するとか。
27:デフォルトの名無しさん
19/02/10 12:48:09.50 px4mCHlG0.net
前スレでもあったが、シートを選択してなければ、そのシートの選択範囲は取れない
ただそれだけだろ
28:デフォルトの名無しさん
19/02/10 12:56:37.91 YUFMtInCx.net
>>26
元の質問のサンプルはsheet.Selectionという式の構文が間違っているので、仮にシートを選択していようが選択範囲は取れない
あと、シート上のSelectionの情報を取るだけなら画面遷移を伴うSelectではなくActivateで十分だろう
29:デフォルトの名無しさん
19/02/10 13:00:02.97 adWOvpgi0.net
>>24
全く同じことをjsとvbsでやってみました。jsはうまく動作しますが、vbsは動きません
selectedにRowはないと言ってきます。レンジの選択はちゃんと出来ています
jsのコード
var book = GetObject("C:\\file.xls");
var sheet = book.Worksheets( 1 );
sheet.Select;
sheet.Range( "A1", "B10" ).Select
var selected = book.Application.Selection;
var x = selected.Column + selected.Columns.Count - 1;
var y = selected.Row + selected.Rows.Count - 1;
WScript.echo( "x=",x,", y=", y );
book = null;
WScript.Quit(2);
vbsのコード
Set book = GetObject("C:\\file.xls")
Set sheet = book.Worksheets( 1 )
sheet.Select
sheet.Range( "A1", "B10" ).Select
Set selected = book.Application.Selection
Set x = selected.Row ' ここでエラー
MsgBox "x:" & x
Set book = Nothing
30:デフォルトの名無しさん
19/02/10 13:03:50.84 px4mCHlG0.net
>>27
すまないな
>シート上のSelectionの情報を取るだけなら画面遷移を伴うSelectではなくActivateで十分
実質的にどう違うかわからないので申し訳ありませんが教えていただけませんか
31:デフォルトの名無しさん
19/02/10 13:14:52.82 YUFMtInCx.net
>>29
Selectによる画面遷移はユーザーとの対話を想定した処理で、当然描画処理の負荷がかかる
プログラム上で参照するアクティブなオブジェクトを切り替えるだけならSelectはしなくて良い
32:デフォルトの名無しさん
19/02/10 13:26:46.13 BFbUXkOH0.net
>>28
>>Set x = selected.Row ' ここでエラー
x = Selected.Row
33:デフォルトの名無しさん
19/02/10 13:31:40.65 adWOvpgi0.net
>>31
出来た。 なんだかなあ、、、w
34:デフォルトの名無しさん
19/02/10 13:44:31.83 adWOvpgi0.net
>>24
いろいろ試してみてわかりました
もともと、エクセルのマクロで
y = Selection.Row + Selection.Rows.Count - 1
x = Selection.Column + Selection.Columns.Count - 1
と書いていたものをjsでそのままやったら動かないので、
sheet.Selectionとしたり、book.Selectionとしたりいろいろと試したのですが、
Appliction.Selectionだったんですね
x = book.Application.Selection.Row + book.Application.Selection.Rows.Count - 1
とすれは、jsでもvbsでも両方で動きました
実際は、
Set selected = book.Application.Selection
と一旦とってからの方がやりやすいですね。ありがとうございました
35:デフォルトの名無しさん
19/02/10 15:20:48.09 adWOvpgi0.net
>>30
jsで、Activateでやってみましたが、ワークシートも切り替わってますよ
Selectとの違いがわかりません
vbsではやってません
36:デフォルトの名無しさん
19/02/10 15:55:33.83 hManQYIw0.net
>>34
スレチだ
いい加減にしろ、死ねよ
37:デフォルトの名無しさん
19/02/10 16:05:34.34 ZjJO7g3i0.net
>>6
だれかこれ分かる人おらん?
38:デフォルトの名無しさん
19/02/10 16:25:54.76 vOpxNkmL0.net
>>36
直接は呼べなくてCOM経由でしか呼べない
VBA C# dll 呼び出し
とかでググれ
39:デフォルトの名無しさん
19/02/10 18:24:50.29 kyKghR0l0.net
C#わからんから無責任発言するけどC++でdll作りゃ問題ないならそうすれば?
40:デフォルトの名無しさん
19/02/10 18:46:31.86 96GWWqq3M.net
C++で橋渡しするならC++/CLIでできるね
でもそんな面倒なことをするより普通にexe作るかpowershell書くかして別プロセスとして呼べばいいよ
データの受け渡しはコマンドライン引数なり標準入出力なりを使えばよい
41:デフォルトの名無しさん
19/02/10 19:52:43.32 vOpxNkmL0.net
なんでより面倒な方法をドヤ顔で書いてるんだよ w
C#で書いてちゃんと設定すりゃインテリセンスも効くというのにコマンドラインとかありえねー
42:デフォルトの名無しさん
19/02/10 20:43:54.86 fHWqGmK3a.net
>>36
わかるけどスマホからサンプルコード書くのはしんどいわ
C# ComVisible Excelあたりでググって
43:デフォルトの名無しさん
19/02/10 21:28:15.49 kyKghR0l0.net
>>39
自分でC++dll書けるなら呼び出す側はかなり簡便になるように作れるよ
なによりワークシートの大量データを配列で丸ごと渡せるからね。
コマンドラインじゃ無理でしょ
44:デフォルトの名無しさん
19/02/11 02:36:20.89 QZQ3TitU0.net
>>5
はるか昔に似たようなことやろうとしたが断念して↓で落ち着いた
MsgBox "Err." & err.Number & " " & err.Description, vbCritical, "モジュール名"
45:デフォルトの名無しさん
19/02/11 14:06:13.76 2OxsMAwm0.net
>>37
やっぱ直接は無理か。管理者権限とかCOM経由しか無理なら諦めます。
46:デフォルトの名無しさん
19/02/11 14:07:58.69 2OxsMAwm0.net
>>41
直接は無理そうなんで諦めます。
47:デフォルトの名無しさん
19/02/11 15:17:21.04 PhhkhwtYH.net
>>5
CodeModuleプロパティでなんかできそうだけど使ったことないからわかんね
48:デフォルトの名無しさん
19/02/11 17:58:03.71 fFRcOW+J0.net
エクセルのシートやセルのオブジェクトにどんなメソッドやプロパティがあるのか見れるところないですか
49:デフォルトの名無しさん
19/02/11 18:04:33.43 itY+kGJRF.net
URLリンク(docs.microsoft.com)
URLリンク(docs.microsoft.com)
50:デフォルトの名無しさん
19/02/11 18:43:45.66 fA09NaPq0.net
>>12
のダウンロードした回数多くないか?
有用なツールだと認められた証だろう。作った人は自慢していいよ
51:デフォルトの名無しさん
19/02/11 18:49:07.13 TpVFRub80.net
>>49
ん? これ、何のファイル?
52:デフォルトの名無しさん
19/02/11 22:38:05.08 9CUrx5/r0.net
このスレの人ってやっぱりプログラマーが多いんですか?
それなりにVBA使えるようになった事務職なんですが、転職を考えています
想像してはいたんですが、VBAで職探しするとプログラマーばっかりですね
VBA活かせる仕事ってやっぱりプログラマーになっちゃうんですかね
53:デフォルトの名無しさん
19/02/11 22:48:43.99 +VAWjoKJM.net
>>51
プログラマの定義から自明だろう
VBAのスキルだけで仕事するってことはVBAでマクロ作ること自体を仕事にするってことだろ?
それは即ちプログラマに他ならない
嫌なら他のスキルを身につけた上でその補助道具としてVBAを使うことを考えなさい
54:デフォルトの名無しさん
19/02/11 22:54:21.26 QKPibkACa.net
>>51
プログラマはVBAほとんど書きません
55:デフォルトの名無しさん
19/02/11 23:04:40.76 +VAWjoKJM.net
あとはIT業界でプログラマ以外で入りやすいのはシステムオペレータやコールセンター
VBAを使う機会は少ないかもしれないけどVBAを習得できる程度の頭があるならそれなりに責任たある立場(バイトリーダーくらいを想像すればいい)にはなれるんじゃないかな
56:デフォルトの名無しさん
19/02/11 23:51:16.39 X8tlYFxV0.net
Excel エンジニアから、ステップアップしてプログラマーになった人は、たいてい、Ruby on Rails !
まず、Ruby・Sinatra から、web フレームワークを始める
YouTube にも、そういう成功した人たちの動画がある
57:デフォルトの名無しさん
19/02/11 23:54:44.08 9CUrx5/r0.net
>>52
経理財務畑で10年働いてるので、その補佐としてVBA使ってる現状です
VBA楽しいので、そればっかりの仕事はしたくないんです
たぶん嫌になっちゃうので。
なのでIT業界に行きたいわけじゃないんです
でも、VBAで探すとITばっかりだなーって悩んでるんです
58:デフォルトの名無しさん
19/02/12 00:22:18.17 6UhGKpIA0.net
VBAは習得にかかる時間は他の言語覚えるのと同じくらい?
それとも簡単?
59:デフォルトの名無しさん
19/02/12 00:40:28.65 boZzpQWE0.net
>>57
同じ
60:デフォルトの名無しさん
19/02/12 00:57:29.86 J2uuh0x+M.net
>>57
同じレベルを求めるなら同じ
でもVBAは自称「VBAできます(キリッ」のレベルが他言語比で大幅に低いから、
人前で習得したと言っていいレベルに達するまでの時間は他言語よりずっと短い
61:デフォルトの名無しさん
19/02/12 01:28:22.73 bkolxWEM0.net
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
できました!
62:デフォルトの名無しさん
19/02/12 01:54:53.42 w+cVMhLi0.net
>>60
なんかシンメトリーできれい
63:
19/02/12 04:41:36.02 afakhEje0.net
>>57
VB6 と同じ程度なのでは?
64:デフォルトの名無しさん
19/02/12 07:32:55.78 SvKCMiwAa.net
>>60
エラー処理(例外処理)が緩すぎる
やり直し
65:デフォルトの名無しさん
19/02/12 08:01:42.96 yCgE5JHqM.net
>>56
仕事を効率化するシステムはある程度自分で作るのが当たり前の時代が来る(かもしれない)から
IT業界でなくてもプログラミングは必須になる(かも略
ただしそのツールの主流はVBAじゃないだろうね
いろんなツールや他言語も覚えて他人の仕事をどんどん奪ってください。
そうすれば時代の流れを加速することになるのでヒーローになれます。
66:デフォルトの名無しさん
19/02/12 11:26:12.35 8lolhehX0.net
MSがExcelにPython載せるっつってたから
君が卒業して社会に出る頃にはVBAは消えてるかも知れない
67:デフォルトの名無しさん
19/02/12 13:55:06.88 w218beJOM.net
>>64
まず型はいらない。
コマンドや関数はフローチャートの図形みたいな視覚化とパラメータで作成。
論理エラー以外のエラーは出ない仕組み。
やろうとすればいくらでもできるんじゃね?
68:デフォルトの名無しさん
19/02/12 13:56:32.19 vLhvVMgO0.net
>>65
馬鹿は嘘情報を検証もなく信じる
69:デフォルトの名無しさん
19/02/12 14:29:27.10 yCgE5JHqM.net
>>66
そんな軟弱な
それじゃ小学生向けのプログラミング教室と変わらないじゃん
70:デフォルトの名無しさん
19/02/12 14:34:04.56 yiYRNC81M.net
>>66
まんまRPAじゃね
71:デフォルトの名無しさん
19/02/12 14:40:47.72 CHFilx2O0.net
URLリンク(www.publickey1.jp)
72:デフォルトの名無しさん
19/02/12 15:57:24.73 gVOhdcQpM.net
>>68
一般の個人がやるならこのくらいが普通。
HTML手書きの敷居を下げたホームページビルダーだってそうだろ。
プログラムがCUIっていうのに違和感を持つべきだと思う。
73:デフォルトの名無しさん
19/02/12 16:00:06.68 gVOhdcQpM.net
>>69
そそ、それをより深くしてさらに汎用化させた感じ
74:デフォルトの名無しさん
19/02/12 18:57:41.03 WG+Lzv660.net
>>66
やろうとすればというかもうとっくに先人たちが取り組んで諦めた分野だよ
学生の頃に配線型のプログラミング言語を使ったことあるけど難しすぎて習得を諦めた
75:デフォルトの名無しさん
19/02/12 19:46:07.38 u96ReIy/0.net
先人たちの時代には難しかっただろう
しかし今のPC環境ならグラフィカルなプログラミングも実用化できるんじゃね
76:デフォルトの名無しさん
19/02/12 19:49:06.70 gxc4B4g80.net
>>13さんもう見てないかな
自分で使ってみたけどなんか違う・・・と思って考えてみたら
問題のシャッフル出題(各問1回だけシャッフルして出題)が足りないという結論に
バグもつぶしたし、まだ見てるならレスください
77:デフォルトの名無しさん
19/02/12 21:06:37.12 N98Fn342p.net
すみません、こういうのは出来ますか。
How are you? I’m looking
forward to see you.
を
How are you?
I’m looking forward to see you.
になおす。
要は、中途半端な改行がある文を、一行にまとめる。
78:デフォルトの名無しさん
19/02/12 21:11:53.35 yCgE5JHqM.net
>>74
みんなそんなに全力でテキストベースのプログラミングを避けたいのかねえ?
使いこなせば強力な武器になるとは思わんのか?
79:デフォルトの名無しさん
19/02/12 21:30:27.20 u96ReIy/0.net
>>76
改行をなくすだけなら比較的簡単にできる
適切な位置で改行しろってなら、適切な位置を事前に完全に定義すればまぁできる
>>77
おれは別に避けたいとは思ってないしその必要もないけど
テキスト以外のプログラミングには従来のプログラミング言語にない可能性だってあるしな
80:デフォルトの名無しさん
19/02/12 21:39:40.48 w+cVMhLi0.net
DOSはDOSで使いやすかったと思う。
Windows出たときいらねーべって思ってたけど今思うと3.1はやっぱりいらない。
81:デフォルトの名無しさん
19/02/12 21:45:44.99 N98Fn342p.net
>>78
76です。
すみません。それでは、
.で改行できるようにお願い致します。
82:デフォルトの名無しさん
19/02/12 21:52:09.03 qNrXOr6p0.net
>>80
一旦改行を全て削除して、そのあとでピリオド、クエスチョンマーク、エクスクラメーションマークで改行すればいいんでは。
83:デフォルトの名無しさん
19/02/12 21:55:12.47 N98Fn342p.net
>>81
改行を削除できますか。
仕事で、大量の英文を整理したいので困ってます。
84:デフォルトの名無しさん
19/02/12 22:00:43.06 1aNudvIBa.net
線つなぐやつはサブルーチンが正体不明のアイコンになるからものすごくわかりにくい
逆にわかりやすいプログラムを描くには高度なアイコンデザインセンスが必要ということだ
そんなの天才にしか使いこなせない
85:デフォルトの名無しさん
19/02/12 22:17:01.28 qNrXOr6p0.net
>>82
もうVBA関係なくなっちゃうけど、普通のエディタ使って置換機能を使えばいいだけでは。
86:デフォルトの名無しさん
19/02/12 22:41:31.90 CcMjC8kpM.net
>>84
セル内の文字列を対象にしてると思うからエディタでは無理では?分からないから適当に言うんだけど。
87:デフォルトの名無しさん
19/02/12 23:08:07.22 u96ReIy/0.net
>>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
88:デフォルトの名無しさん
19/02/12 23:38:26.31 ja5MNGvN0.net
>>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
89:デフォルトの名無しさん
19/02/12 23:44:44.19 CcMjC8kpM.net
>>75
最新版は5ですよね?使ってみましたがオブジェクトエラーが起きてどこで停止しているかみてみると、ソート処理時に停止する。
そこで4_2をベースにこちらでカスタマイズして、ボタン1つでセル内の文字列をシャッフルするコードをネットから拾ってきました。
ついでに縦横の切り替えもボタンで実現してます。
やりていことこ実現できているので満足です
90:デフォルトの名無しさん
19/02/12 23:58:53.49 gxc4B4g80.net
そうでしたか、なんかすみません
じゃ本当に終わります。
91:デフォルトの名無しさん
19/02/13 02:27:50.55 NEpE3zFw0.net
Python などの形態素解析で、文末でも判定すれば?
92:デフォルトの名無しさん
19/02/13 06:35:13.37 9485a3fT0.net
>>84
例えば?メモ帳とか?
改行を無くす置換はありますか?
93:デフォルトの名無しさん
19/02/13 07:12:30.92 i20vW39tM.net
>>82
改行置換ならVBAも要らん
URLリンク(excelkamiwaza.com)
94:デフォルトの名無しさん
19/02/13 07:30:01.13 AhLCWHg20.net
>>92
ありがとうございます。一つのセルに最大どんだけテキスト貼れるかですね
95:デフォルトの名無しさん
19/02/13 07:36:07.18 QsqoJnTp0.net
>>92
cntl+jか。知らなかった。ほかのワードとかでも使えるかな
96:デフォルトの名無しさん
19/02/13 07:44:47.38 zGo41KJe0.net
セルを指定する時とか”A1”とかちまちま書くのが普通?
めんどくさいんだけどそんなもの?
97:デフォルトの名無しさん
19/02/13 08:07:53.15 kNKWDOP4H.net
>>95
ヘッダの話なら1個ずつ書いてくしかない
98:デフォルトの名無しさん
19/02/13 08:46:40.27 LdPPLa0i0.net
>>95
状況とやりたいことによる
範囲指定する書き方も出来るし、変数で楽できる場合もある
99:デフォルトの名無しさん
19/02/13 08:48:18.23 LdPPLa0i0.net
>>93
Excelと関係ない英文を整形したいだけならテキストエディタを使った方が早いぞ
せめてWordにしとけ
100:デフォルトの名無しさん
19/02/13 09:17:10.81 s1ZD6WV/0.net
「何の条件」で「何を」「どのようにしたいか」の中で「何の条件で」が出てないな
「何を」「どのようにしたいか」も一部の条件しか出てない気がする
連想ゲームじゃないんだから質問はちゃんとかけよ
101:デフォルトの名無しさん
19/02/13 10:05:00.38 s1ZD6WV/0.net
>>76
この質問は
Excelの枠に配置で、折り返して全体を表示するに
以下の改行のない文を貼り付けた時に
How are you? I’m looking forward to see you.
セルの幅に合う位置で改行されるのを思いの位置で改行したい
ってことだろ、思いの位置が明文化されないとな
例えば英文であるかわからんが「...」みたいな文とか「!!」みたいなとかもありそうだしな
102:デフォルトの名無しさん
19/02/13 10:59:06.69 kNKWDOP4H.net
>>95
あと以下のようにしておくと面倒でなくなるよ
cns_COL_ID = “A”
Range(cns_COL_ID & 1) = “ID”
103:デフォルトの名無しさん
19/02/13 11:08:47.69 s1ZD6WV/0.net
>>95
貼り付けられたイベントで処理するのも普通だけどな
位置は分かるから、そのセル・レンジを処理する
104:デフォルトの名無しさん
19/02/13 11:41:27.51 s1ZD6WV/0.net
Private Sub Worksheet_Change(ByVal Target As Range)
まあ、Changeイベントで
If Application.CutCopyMode = xlCopy Then
End if
コピーされた場合「Range」に対して処理を書くんだな
105:デフォルトの名無しさん
19/02/13 14:06:51.14 cLVWJ/NN0.net
セル上でドラッグドロップしたら、それでプログラムが動くようなことってできますか
たとえば、縦1列に20個のデータが入っていて、その1つを別の場所に
ドラッグドロップすると順番が入れ替わるようにするとか
106:デフォルトの名無しさん
19/02/13 14:22:50.50 ID
107::kNKWDOP4H.net
108:デフォルトの名無しさん
19/02/13 14:36:01.74 cLVWJ/NN0.net
>>105
出来るんですね。 ありがとう
109:デフォルトの名無しさん
19/02/13 14:45:16.60 kNKWDOP4H.net
>>106
あとApplication.Enableevents = Falseしないと配列をセルに書く時にWorksheet_changeが起きて無限ループするから気を付けて
110:デフォルトの名無しさん
19/02/13 14:45:50.22 s1ZD6WV/0.net
>>104
それって、切取りと切り取ったセルの挿入のことじゃない
111:デフォルトの名無しさん
19/02/13 18:05:52.67 YjEmAg3Q0.net
>>104
シフト押しながらドラッグするだけやろ。
テーブル定義ならシフトすら必要ない。
既存の機能を自力で作ってどうするんや
112:デフォルトの名無しさん
19/02/13 19:29:04.53 yofO24jUp.net
>>94
置換前にcntl+jと入れると、置換ボタンが押せない。
113:デフォルトの名無しさん
19/02/13 19:30:45.49 JQT8xzoY0.net
検索で正規表現を使えないというのもあれだな。
114:デフォルトの名無しさん
19/02/13 20:11:24.50 1az0o1MYM.net
ワードラップの問題だろ改行関係ない
115:デフォルトの名無しさん
19/02/13 20:17:10.65 zGo41KJe0.net
>>96>>97>>101>>102
ありがとう
>>101
これはなぜ楽になるの?
116:デフォルトの名無しさん
19/02/13 20:39:49.89 9c/UwGiq0.net
>>113
楽というかマナー
意味の分かる定数で定義することで他人がプログラムを追わなくても理解できるようになる
117:デフォルトの名無しさん
19/02/13 20:49:54.38 9vYYaAAUa.net
プロパティ使ったほうが定数よりずっとわかりやすいよ
118:デフォルトの名無しさん
19/02/13 20:50:53.76 Hdk7qA5y0.net
決まりきったセル(範囲)参照する時は名前定義なりテーブル化した方がいいと思うけどな
119:デフォルトの名無しさん
19/02/13 20:54:23.96 vtryBqN5M.net
vba初心者です。
マウスイベントやスリープなどのapi を使って
会社で使うツールを半自動化してますが、
こういうアナログな方法ではなく、
マウスでクリックしなくてもツールがアクティブになったり、
スリープではなく画面が遷移したのを読み取って次の命令を実行してくれるような
ものを作るにはどういう学問を学べばいいですか?
120:デフォルトの名無しさん
19/02/13 20:57:56.29 zGo41KJe0.net
>>114
あり
121:デフォルトの名無しさん
19/02/13 21:14:49.27 0iV7VQWH0.net
ウインドウズのイベントをフックする
122:デフォルトの名無しさん
19/02/13 21:25:30.47 Hdk7qA5y0.net
>>117
UI Automation
ただ色々アレで結局Win32API併用することになることが多いけど
123:デフォルトの名無しさん
19/02/13 23:29:11.25 vsTJ7JQU0.net
自作した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
124:デフォルトの名無しさん
19/02/14 10:46:56.68 oxBa5+ju0.net
>>121
まあ、気楽に回答しておく
>〇 自分で付ける関数名??
その通り
>△ dllファイルの場所フルパス??
Pathが通ってればフルパスでなくてもよい
>□ dllファイル内の何か?
別名宣言できる・・・まあ、調べろ
>ちなみにこれでも似たような事ができるんですか?
>Dim tarApp As Variant
>Set tarApp = CreateObject(“◎◎“)
> tarApp.Documents.Open FileName:="〇〇"
>Set wdApp = Nothing
書いている意味が理解できてないだろう、Office系のソフトはちゃんとしたルールで作られてるが
こんなこと気にする前に、有効なDllを作ってみろよ
尚、理解できてないことが丸わかり
125:デフォルトの名無しさん
19/02/14 12:07:22.70 xvzsmsEPM.net
(´;ω;`)イベントが起こらなくなりました
126:デフォルトの名無しさん
19/02/14 12:08:59.63 FmdtC3Uo0.net
>>123
エクセル再起動しろ
127:デフォルトの名無しさん
19/02/14 12:20:00.82 oxBa5+ju0.net
>>123
まあ、間違ってるんだろそれだけ
ソースを出さなきゃ何もないよ
イベント鳥杉ってよくあるからな
有効な手段は、護摩をたけ、できるだけ激しく火事には気を付けろ
128:デフォルトの名無しさん
19/02/14 13:20:00.69 chn4JYyT0.net
たとえば、A1からC50までデータがあってA列をキーにソートしたいのですが、
途中たとえば、10行、15行、20-25行は抜かしたいのです。 これらにはコメントや他のものが入ってるので
でもそれらを抜かして全体でソートしたいのですが、Unionで繋いでやったら複数のレンジは出来ないみたいな
エラーを返されました
何かいい方法はないでしょうか
129:デフォルトの名無しさん
19/02/14 13:50:43.73 chn4JYyT0.net
例えば、画面表示は止めて、メモリ上で行を移動させてソートする行をまとめてからソートして、
また行をもとに移動させてから、画面上に結果を表示とか、出来ると可能性があると思うのですが
130:デフォルトの名無しさん
19/02/14 14:23:28.89 sSBdRoDO0.net
>>126
if i = 対象行 then
行入替え
end if
とかでいいんじゃね?
131:デフォルトの名無しさん
19/02/14 16:52:27.07 PSNlkVOrM.net
>>126
行を非表示にしたら対象から外してくれんかな…(試してない)
132:デフォルトの名無しさん
19/02/14 17:20:39.55 L4IMpAFUM.net
>>121
〇 自分で任意に付ける関数名
□ dllがエクスポートしている関数名
133:デフォルトの名無しさん
19/02/14 17:59:11.87 bFGkVmlp0.net
dllってよくわかんないだけどvbsのexecuteglobalみたいな感じ?
134:デフォルトの名無しさん
19/02/14 19:55:09.02 chn4JYyT0.net
>>129
マジかあ。 やってみた。 出来てる
なんだよ、プログラム作っっちゃった。 ソートしないところを一旦別に移して圧縮してソートしてから
下に戻すってやつ
なんだよ、 この2時間返して w
135:デフォルトの名無しさん
19/02/14 22:52:59.46 nNkHGtvOM.net
>>132
まあ、普通にデータはテーブルでもてば良いだけだろ
整形は別シートででーたをさんしょう
136:デフォルトの名無しさん
19/02/15 00:17:44.61 lL6vjf9tM.net
>>131
外部にライブラリーなどを持たすんだから
Include の方が近いだろ
137:デフォルトの名無しさん
19/02/15 00:49:30.00 6QKgXGI40.net
よろしくお願いいたします。
VBAで、半角カナ文字列を与えると、その文字列の中にある、
ァィゥェォャュョッ などの小さい字をアイウエオヤユヨツなどの大きい字(半角カナ)に変換して返す
functionを作りたいのですが、どう書いていいのかわかりません。
ひとつずつ、ァをアに変換、ィをイに変換、のように書くしかありませんか?
まとめて書く方法ってあるのでしょうか?
138:デフォルトの名無しさん
19/02/15 01:15:28.74 BkaZ3+610.net
Ruby のNKF とか、文字列.tr とか、正規表現とか
139:デフォルトの名無しさん
19/02/15 01:18:13.72 vhn0rFgQ0.net
60項目7万件のjsonデータ読んで保存した。
開いたらモジュールとフォームが破損って何なんだよ。うう吐きそうだ。
10Gじゃメモリたりなかったのか?いや、それならそうメッセージがでるはず。
まさかこんなんでコード飛ぶとは思わなかったからバックアップは取ってない。
10分おきの自動バックアップのデータはあったけどデータ取るのに2日かかったからとっくに消えてる。
もう作る気おきない。
参った。
140:デフォルトの名無しさん
19/02/15 01:20:07.21 vhn0rFgQ0.net
>>135
文字コードを差分だけ加算すればいい。
141:デフォルトの名無しさん
19/02/15 01:21:08.10 EWf/hEPba.net
>>137
ざまあ
そういうのはCSVを介するのが定石だろう
142:デフォルトの名無しさん
19/02/15 01:23:24.10 NXuVhChr0.net
>>135
dictiona
143:ryオブジェクトで連想配列作れば? 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 動くかわからんけどお試しあれ。
144:デフォルトの名無しさん
19/02/15 01:37:27.77 6R3QhjK00.net
>>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
145:デフォルトの名無しさん
19/02/15 01:38:16.76 6R3QhjK00.net
一部の文字列関数が、なぜか5ちゃんねる全体のNGワードになってるんで、わざとスペースを入れてある
146:136
19/02/15 01:38:19.40 BkaZ3+610.net
Ruby では、
str = "ァィゥェォャュョッあ"
puts str.tr( "ァィゥェォャュョッ", "アイウエオヤユヨツ" )
#=> アイウエオヤユヨツあ
147:デフォルトの名無しさん
19/02/15 01:43:51.10 6R3QhjK00.net
もっとシンプルなのができた
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
148:デフォルトの名無しさん
19/02/15 01:46:51.97 6R3QhjK00.net
しつこいけど、これで最後
Function kanacaps(s1) As String
t = Array("ア", "イ", "ウ", "エ", "オ", "ヤ", "ユ", "ヨ", "ツ")
For i = 1 To Len(s1)
c = Mid(s1, i, 1)
If "ァ" <= c And c <= "ッ" Then Mid(s1, i) = t(As c(c) - 167)
Next
kanacaps = s1
End Function
149:デフォルトの名無しさん
19/02/15 01:53:45.99 6R3QhjK00.net
最後と言いながらもう一度
これってまだまだコンパクトにできるパターンだな
Function kanacaps(s1) As String
t = Array("ア", "イ", "ウ", "エ", "オ", "ヤ", "ユ", "ヨ", "ツ")
For i = 1 To Len(s1)
c = Asc(Mid(s1, i))
If 166 < c And c < 176 Then Mid(s1, i) = t(c - 167)
Next
kanacaps = s1
End Function
150:デフォルトの名無しさん
19/02/15 02:00:19.18 6R3QhjK00.net
1回しか使わない変数を消した
これ以上の短縮は無理かな?
Function kanacaps(s1) As String
For i = 1 To Len(s1)
c = Asc(Mid(s1, i)) - 167
If 0 <= c And c < 9 Then Mid(s1, i) = Array("ア", "イ", "ウ", "エ", "オ", "ヤ", "ユ", "ヨ", "ツ")(c)
Next
kanacaps = s1
End Function
151:デフォルトの名無しさん
19/02/15 09:21:30.82 U9ClSHCYM.net
>>147
横レスだけど
他の言語に比べかったるいけどおいておいて
変換に使う文字列または配列はfunctionの外
変数はアドレス渡し function内で文字列を書き換え
変更が有った場合 true なかった場合false
使い勝手と動作速度を優先する
とスマホで書いてみる
152:デフォルトの名無しさん
19/02/15 09:40:41.96 GIzZTHxJM.net
>>147
たしかにs1を書き換えつつまたそれを返すというのは無駄だ。
ByValで受けて書き換えた結果を返すかByRefのままでSubにするかだと思う。
Booleanで返すのは今時の趣味には合わないんじゃないかな。
153:デフォルトの名無しさん
19/02/15 09:58:15.95 FxoJIoi60.net
>>149
セルを書き換えるべきか書き換えないかの判断をする
全てのセルの書き換えは時間もかかるし、空白のセルもある
必要ないデータは書き換えないでいいようにする
if kanacaps(s1) then cells(i,j) = s1
のように
154:デフォルトの名無しさん
19/02/15 11:36:22.43 GIzZTHxJM.net
>>150
s1自体は As Stringだろ
元の質問もワークシート関係ない話のように見受けられる
155:デフォルトの名無しさん
19/02/15 11:44:10.23 FxoJIoi60.net
>>151
だったら、このスレ関係ないな本当にそう思うのか?
自分の主張じゃなく要求者の状況を読まなければ意味ない
150の書き方でならシート全てを変換するfunctionも簡単にできるけど
お題を読めないのは厳しいな
156:デフォルトの名無しさん
19/02/15 11:49:05.00 6R3QhjK00.net
データ量と出現頻度と、呼び出し側でのデータの�
157:揩ソ方がわからない限り、最適解は出せないと思う 用途はなんだろう?半角カナが通るのにカナ小文字が使えないシステムなんて、大昔のオンラインシステムぐらいしか思い付かんけど
158:デフォルトの名無しさん
19/02/15 11:56:15.89 FxoJIoi60.net
>>153
今更聞いてる処がどうなの?
こんなのどっちでも簡単なのに、私は書かないけどなポリシーです
159:デフォルトの名無しさん
19/02/15 11:59:50.72 GIzZTHxJM.net
>>152
データソースがRangeであるか否かに関わらずs1は As String相当 だろう。
件の関数が何を返すべきか(もしくはSubにすべきか)という話とは関連が薄い。
160:デフォルトの名無しさん
19/02/15 12:04:24.39 FxoJIoi60.net
>>155
別にfunctionの使い方を考えないならどうでもいいじゃない
ただ誰も使わんだろ、それは言い過ぎか使うやつはいるな
161:デフォルトの名無しさん
19/02/15 12:06:23.85 FxoJIoi60.net
基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
162:デフォルトの名無しさん
19/02/15 12:09:16.16 GIzZTHxJM.net
>>157
不思議な意見を言う奴だな?
163:デフォルトの名無しさん
19/02/15 12:12:48.44 U9ClSHCYM.net
>>158
ここは、もうやめよう
164:デフォルトの名無しさん
19/02/15 12:42:06.25 Aa3kOoYYM.net
俺は理解したいけど使うの自分ならまぁ動けば良いや派です
話題変わるけど今はselenium使えないの?
firefox操作したいけど色々なサイトのコード試しても動かんのだけど最新のseleniumVBAでfirefox操作するVBA使ってる人居たらfirefox起動からログイン処理するコード貼ってほしい
165:デフォルトの名無しさん
19/02/15 12:51:15.55 Qph8FA2WM.net
>>157
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
確かに>>150は恥ずかしいなw
166:デフォルトの名無しさん
19/02/15 12:54:55.89 FxoJIoi60.net
>>161
ふ~ん、でどのように?(笑)
167:デフォルトの名無しさん
19/02/15 13:05:41.84 QYjRxS22H.net
配列を使わざるを得ないなら二次元配列に変更前と変更後を並べて突っ込む
168:デフォルトの名無しさん
19/02/15 13:08:15.40 FxoJIoi60.net
>>161
まさか、148で変更をBoolean返すようにしたのを前提に150を書いたけど
何も読まずに書いてる?
169:デフォルトの名無しさん
19/02/15 13:13:10.46 FxoJIoi60.net
もうやばいけど、バカって好きだな
170:デフォルトの名無しさん
19/02/15 13:19:37.16 U9ClSHCYM.net
>>161
で、何か意見は?
171:デフォルトの名無しさん
19/02/15 14:34:08.07 GIzZTHxJM.net
>>163
結局そうなるよね。
一括で貼り付ければ楽なのに、わざわざ If でまだらに個別セットなんて却って遅くなる。
172:デフォルトの名無しさん
19/02/15 14:59:45.37 FxoJIoi60.net
まあ、しょうがない罠
分かんないんだもの
173:デフォルトの名無しさん
19/02/15 15:22:25.20 Qph8FA2WM.net
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
とか言いつつ質問者の意向もわからんのにコード書いてドヤるとか w
174:デフォルトの名無しさん
19/02/15 15:34:51.44 FxoJIoi60.net
>>169
じゃあ、お前ヒントも書かずにわかるのか?
ってか、引きこもりの文盲か?
175:デフォルトの名無しさん
19/02/15 15:36:42.23 FxoJIoi60.net
あっ、すまん、ヒントを書いてもわからないんだよな
176:デフォルトの名無しさん
19/02/15 15:43:07.43 FxoJIoi60.net
>>167
どんだけ、アホで生きてるんjンだよ
関数の貼り付けとセルへの値の書き込すらわからんかな
177:デフォルトの名無しさん
19/02/15 17:36:05.74 Qph8FA2WM.net
>>170-172
だから
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
とかが不思議ちゃんて言われてるんだよ
セルへの書き込み程度でドヤるような奴だからしょうがないだろうけど w
178:デフォルトの名無しさん
19/02/15 18:35:03.47 U9ClSHCYM.net
>>173
うふ
179:デフォルトの名無しさん
19/02/15 19:18:49.62 FIDflx8L0.net
Range("A1")="名前"
Range("A2")="住所"
Range("A3")="性別"
Range("A4")="郵便番号"
みたいな複数にわかる処理を
Range("A1:A4")="名前、住所、性別、郵便番号"みたいな感じ(もちろんこれではダメ)で
一行(一回の処理)でまとめて設定できるような
180:方法ってありますか?
181:デフォルトの名無しさん
19/02/15 19:20:38.46 kIiggQTh0.net
>>175
ある
182:デフォルトの名無しさん
19/02/15 19:21:12.65 GIzZTHxJM.net
Sub kanacaps(s1 As String)
とした場合、
対象配列Aの各要素A(i,j)に対して
kanacaps(A(i, j)) をループで回すだけ。
シートに書き出したければ単にAを貼り付ける。
このとき書き換えがあったかどうかを判定する必要はない。
Function なら
Function kanacaps( ByVal s As String) As String
で A(i, j) = kanacaps(A(i, j))
これも書き換えがあったかどうかを判定する必要はない。
普通は後者を選ぶだろう。
183:デフォルトの名無しさん
19/02/15 19:28:49.74 kIiggQTh0.net
>>177
これダメなやつ
最も負荷の掛かるセルへのアクセスは最小限にするべき
コードが短ければいいってもんじゃない
184:デフォルトの名無しさん
19/02/15 19:37:44.26 GIzZTHxJM.net
>>178
なんだよ
セルの個数の問題なのか貼り付け回数の問題なのかはっきりしろ
185:デフォルトの名無しさん
19/02/15 20:01:27.87 kIiggQTh0.net
>>179
自分で処理時間計ってみれば?
186:デフォルトの名無しさん
19/02/15 20:18:49.96 V814XEHD0.net
>>175
Array
187:デフォルトの名無しさん
19/02/15 22:25:19.73 f25ghBxYM.net
まあ、例えばひづ
188:デフォルトの名無しさん
19/02/15 22:31:54.84 f25ghBxYM.net
スマホは書いてる途中で書き込んじゃう癖が有って申し訳ない
例えば日付を月日で表しているセルを文字列で取得すると月日の文字が取得できる
その文字をそのセルに書き込むと数値としての月日じゃあなくなるよな
不用意に変換しないことも大事なんだがな
189:デフォルトの名無しさん
19/02/15 23:12:49.57 f25ghBxYM.net
気になってshift jis の文字コードを確認してみた
If 166 < c And c < 176 Then
これは半角小文字だよ
お題は全角カタカナ小文字だろっと
190:デフォルトの名無しさん
19/02/15 23:38:50.38 e71gRKct0.net
凄いよな。
何でこうも、どんな用途に使うのかわからないような処理ばっか出てくるんだか。
そのうち、VLOOKUP(縦検索)でもHLOOKUP(横検索)でもない、
斜め検索のJLOOKUP作れとか言い出しそうだな。
191:デフォルトの名無しさん
19/02/16 00:29:38.87 VwWEnU/S0.net
データ処理の関数がわかんなくてお前らに横投げしてるからだろjk
192:デフォルトの名無しさん
19/02/16 01:02:24.60 Q7QEPoKZM.net
まあ何だな 全角カタカナの文字列に半角突っ込む奴の指示は聞かないけどな
193:デフォルトの名無しさん
19/02/16 01:38:49.39 tkdqnLOdd.net
最初の質問は>>135だぞ
処理したいのは半角カナ、作りたいのはFunction、関数の返す値は修正後の文字列と仕様が明記されてるのに、どうしてBooleanだのByRefだのが出てくるんだよ
おまけに全角とか言い出すやつまで出てくるし
194:デフォルトの名無しさん
19/02/16 02:12:02.80 Q7QEPoKZM.net
ァィゥェォャュョッ 全角小文字
ァィゥェォ 半角小文字
書いてるのが全角だったからな
195:デフォルトの名無しさん
19/02/16 02:22:26.92 Q7QEPoKZM.net
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(A1,"ァ","ア"),"ィ","イ"),"ゥ","ウ"),"ェ","エ"),"ォ","オ"),"ャ","ヤ")
,"ュ","ユ"),"ョ","ヨ"),"ッ","ツ")
196:デフォルトの名無しさん
19/02/16 05:24:29.40 evls1zM4M.net
>>190
ワラ
197:デフォルトの名無しさん
19/02/16 05:32:17.75 Q7QEPoKZM.net
素人が素人に頼むとなそうなるわな
(笑)
198:デフォルトの名無しさん
19/02/16 07:48:58.08 GEWA9gU60.net
方向が変わったのは>>148がきっかけだよね
199:デフォルトの名無しさん
19/02/16 07:53:50.02 q1DAaOKG0.net
>>188-189
そこは最初から違和感あったわ
> VBAで、半角カナ文字列を与えると
って書いてて
> ァィゥェォャュョッ
って全角で書いてるからネタだと思って放置してたけどァィゥェォッュョみたいな文字ってスマホだと入力できないのな
(いや、できるかも知れんが俺にはわからんかったのでこれはコピペで入力した)
まあそれならそうと書いて欲しい
この手の変換はそれなりに需要があるみたいで
カタカナ 小さい文字 変換 vba
とかでググるとそれなりにヒットする
とりあえずは
URLリンク(www.relief.jp)
とかを参考にすればいいと思う
200:デフォルトの名無しさん
19/02/16 10:00:10.02 uFHexw8O0.net
スマホで半角カナ小文字の入力は、俺のXperiaの場合だと「la」と入力すると全角小文字の「ぁ」になって、変換を押すと候補に半角「ァ」が出てくる
201:デフォルトの名無しさん
19/02/16 10:07:20.68 uFHexw8O0.net
フリック入力ならキーパッドの「ま」の下の「小」をタップすると小文字になって、候補に半角も自動的に出てくる
202:デフォルトの名無しさん
19/02/16 13:35:38.12 V3lev6Wl0.net
>>175
1) Range("A1:A4") = WorksheetFunction.Transpose(Split("名前、住所、性別、郵便番号", "、"))
2) Range("A1:A4") = WorksheetFunction.Transpose(Array("名前", "住所", "性別", "郵便番号"))
3) Range("A1:A4") = [{"名前";"住所";"性別";"郵便番号"}]
203:デフォルトの名無しさん
19/02/16 14:00:48.72 i29F+S9hM.net
VBAの2次元配列って1次元配列として使えないのね。不便。
204:デフォルトの名無しさん
19/02/16 14:26:02.22 Y5C6RkaG0.net
二次元配列は何が入ってるか分かりにくいしネストも増えやすいから構造体かクラスを使う
205:デフォルトの名無しさん
19/02/16 14:36:39.42 eWrDkcRxM.net
>>198
割り切ってジャグ配列をメインに使えばいい
Rangeはしょうがないけど
206:デフォルトの名無しさん
19/02/16 15:38:49.30 XgEm9HUa0.net
>>199
XLシートが二次元の表なんだから難しくないだろ。
三次元なら立体を思い浮かべればいい。四次元になると時間をイメージかな。そこまでやったことないからわからん。
三次元までのネストの深さは気にならないな… ifとかで増えるにしても。増えすぎるなら内部を切り出すかな。
まあ、仕様によってどう作るかはいろいろだけど。
207:デフォルトの名無しさん
19/02/16 16:03:55.03 kXl7LE8Fx.net
n次元 = n階層の木構造とイメージするのが単純で良いと思うが
208:デフォルトの名無しさん
19/02/16 16:14:59.54 3bJEG0FOH.net
>>201
難しくないのにわからんって馬鹿?
209:デフォルトの名無しさん
19/02/16 16:41:41.01 eWrDkcRxM.net
n次元より配列の配列の...の方が再帰的に扱いやすい
210:デフォルトの名無しさん
19/02/16 17:53:27.66 q1DAaOKG0.net
>>203
日本語不自由?
難しくないのは二次元
わからんのは四次元
211:デフォルトの名無しさん
19/02/16 22:42:47.76 0In5hf0F0.net
モジュールで
Dim arr() As String
Dim aaa As String
ReDim arr(2)
arr = ThisWorkbook.arr
aaa = arr(0)
ThisWorkbookに下記を設定
Public Function arr() As String()
Dim arra(2) As String
arra(0) = "日本"
arra(1) = "米国"
End Function
Thisworkbookの配列を呼び出したいんですがどこが間違っていますか?
212:デフォルトの名無しさん
19/02/16 23:01:11.68 V3lev6Wl0.net
>>206
arr = arra
End Function
213:デフォルトの名無しさん
19/02/16 23:03:14.34 CD9VXZwW0.net
エラーメッセージ何よ。
214:デフォルトの名無しさん
19/02/16 23:06:17.40 0In5hf0F0.net
>>208
インデックスが有効範囲にありません
215:デフォルトの名無しさん
19/02/16 23:10:54.03 CD9VXZwW0.net
>>209
ああ、よくある、結局原因がよくわからないやつね。
試したら、>>207が正解だったわ。
面白いな。Thisworkbookに書いてあるものを呼ぼうなんて、
考えたこともなかったから、それが原因かと思ったわ。
216:デフォルトの名無しさん
19/02/16 23:17:04.90 7Iomz0v50.net
そもそも配列名とプロシージャ名が同じところもおかしい
217:デフォルトの名無しさん
19/02/17 00:05:03.03 kxT8s3Mp0.net
馬鹿はそんなもん
間違いにくいようにコードを書くことをしない
218:デフォルトの名無しさん
19/02/17 09:02:57.20 hMcsTv+Y0.net
>>212
コードを書かなきゃ間違えないということか、なるほど。
それとも馬鹿は誤解を受けないような文章を書くことをしないってことか?
219:デフォルトの名無しさん
19/02/17 09:28:38.67 l7X7saNL0.net
俺が分かるからいいみたいな考えだとチームで開発はできないよ
220:デフォルトの名無しさん
19/02/17 10:19:09.83 hMcsTv+Y0.net
>>214
それはよく解る。保守性も悪くなるよね。
221:デフォルトの名無しさん
19/02/17 10:48:02.04 1fMGblo0M.net
一般的なプログラミング言語なら正しいけど、VBAだとかなり厳しくない?
下に合わせるとそれこそ可読性も保守性もクソもないゴミにしかならないよ
222:デフォルトの名無しさん
19/02/17 10:53:43.33 vi4O111wa.net
言語は問わず下に合わせるとゴミになる
属人性の排除といって下に合わせたがる人が少なく無いけどあれは間違いなんだ
223:デフォルトの名無しさん
19/02/17 11:25:11.92 EkiBf8gr0.net
VBAで下に合わせると、やたらSelect & Selection.Copyが多い、
マクロの自動記録じゃねえのこれ?
みたいなのが出来上がる。
224:デフォルトの名無しさん
19/02/17 11:45:18.78 7MWZQWrl0.net
ActiveHogeHoge へ参照が多いとそうなんだろうなと思うことにしている
225:デフォルトの名無しさん
19/02/17 11:45:44.34 l7X7saNL0.net
>>216
>>217
>>218
意味が伝わってないみたいだけど
cells(i, 1) = arr(i-1, 0) がセルに何が書き込まれるかはコードの前後を追わないと分からないよね
これを分かるようにするのが分かりやすいコード
プログラミングが上手か下手かは関係ない話
226:デフォルトの名無しさん
19/02/17 11:51:57.63 l7X7saNL0.net
多次元配列も Dim lngEleName As Long とか専用ループ変数を準備してるならいいけど、ijkで回してるのを見た日にはそいつを殴りにいくね。
227:デフォルトの名無しさん
19/02/17 11:59:45.89 plSLxTsM0.net
ひえー
なんか諸先輩方思うところ多かったようで
自分も書くとき気をつけないと
初心者ですを免罪符にしないように気をつけよう
228:デフォルトの名無しさん
19/02/17 12:32:03.24 jVC6vo8Y0.net
>>221
i, j, k でいいよそんなのw
229:デフォルトの名無しさん
19/02/17 12:47:43.60 1fMGblo0M.net
>>221
i, j, k で分かりにくくなるような長ったらしいプロシージャを書くのが悪い
230:デフォルトの名無しさん
19/02/17 13:16:45.17 Nxpc9YF00.net
>>223
上司「お前クビ」
231:デフォルトの名無しさん
19/02/17 13:31:38.58 Nxpc9YF00.net
>>224
プロシージャが簡潔ならおk
232:デフォルトの名無しさん
19/02/17 13:42:14.79 gMXfU/jdM.net
>>225
つまらない趣味にこだわるのは中学生までだぞ
233:デフォルトの名無しさん
19/02/17 13:49:15.60 gMXfU/jdM.net
偏見かもしれんがプログラミングで日常言語に近づけようとするやつは代数とか苦手だった?
って思っちゃう
234:デフォルトの名無しさん
19/02/17 14:06:36.59 7mUUrd8D0.net
蛇腹erは代数が苦手(キリっ
235:デフォルトの名無しさん
19/02/17 14:20:05.25 Nxpc9YF00.net
>>227
上司「このiってなに?ちゃんと説明して」
236:デフォルトの名無しさん
19/02/17 14:51:51.50 naWxhgEk0.net
単なるループカウンタですけど?
見ればわかりますよね?
237:デフォルトの名無しさん
19/02/17 14:57:39.75 k4RkjrxP0.net
>>221
Ing Ele ってなんの略ですか
238:デフォルトの名無しさん
19/02/17 15:13:51.30 Nxpc9YF00.net
>>232
しばくぞコラ(LongとElementだよ(にっこり))
239:デフォルトの名無しさん
19/02/17 15:32:11.89 t0Nzx7bGx.net
ループカウント用のプロシージャ内ローカル変数でiとかjとか使うのはありだと思う
モジュールレベル以上の参照スコープを持たせた変数をiとかjとかarrとかbufとかで宣言されてたら流石にキレるな
240:デフォルトの名無しさん
19/02/17 15:36:00.05 de8FYcuQ0.net
スコープが大きいほど変数名も長くして
241:デフォルトの名無しさん
19/02/17 15:43:21.47 urjL+jec0.net
今時ハンガリアン使ってるのクソダサい
242:デフォルトの名無しさん
19/02/17 15:49:41.73 Nxpc9YF00.net
俺はゴールデンの方が好き
猫飼ってるから無理だけど
243:デフォルトの名無しさん
19/02/17 16:33:33.48 Rm6p2g7t0.net
sheet1, sheet2とあって、sheet1に、
Private Sub ButtonClear_Click()
があります
これをsheet2のボタンを押したときに呼び出したいのですが、sheet2のsubで
Private Sub ButtonTest()
Worksheets("sheet1").Select
ButtonClear_Click
end sub
としてもそんなsubはないと言ってきます。他にもいろいろと試したのですがどうしたらいいのでしょうか
また、標準モジュール内で、
Sub ModuleTest()
Worksheets("sheet1").Select
ButtonClear_Click
end sub
としても同様に動きません
Worksheets("sheet1").ButtonClear_Click
とかしてもダメでした
244:デフォルトの名無しさん
19/02/17 16:40:07.44 vi4O111wa.net
共通の処理は共通モジュールかクラスに置いてください
シート1、シート2からはその共通の処理を呼び出してください
イベントハンドラはユーザーコードから呼び出すものではありません
245:デフォルトの名無しさん
19/02/17 16:50:40.07 Nxpc9YF00.net
>>238
Privateが付いてるプロシージャはそのモジュール内でのみ呼び出し可能
sheet1とsheet2は別モジュール
だから怒られてる
246:デフォルトの名無しさん
19/02/17 16:54:09.55 Bys9dR540.net
化石みたいなレスのあるスレだな
247:デフォルトの名無しさん
19/02/17 17:02:42.50 EkiBf8gr0.net
>イベントハンドラはユーザーコードから呼び出すものではありません
面倒くさいとき、普通に呼び出してたわ。
248:デフォルトの名無しさん
19/02/17 17:18:01.63 Rm6p2g7t0.net
>>240
Public にしてもはずしてもダメです
249:デフォルトの名無しさん
19/02/17 17:22:34.48 kxT8s3Mp0.net
馬鹿はClassを知らない
250:デフォルトの名無しさん
19/02/17 17:57:40.00 EkiBf8gr0.net
>>243
>>206みたいにしても?
251:デフォルトの名無しさん
19/02/17 18:15:37.59 l7X7saNL0.net
>>243
そもそもボタンってデフォで標準プロシージャに追加されなかったっけ?
標準モジュール作って、Sub ButtonClear_Click() をまるごと移動させたらいけんじゃね?
252:デフォルトの名無しさん
19/02/17 18:27:30.13 hMcsTv+Y0.net
>>244
そんくらい知ってるよ、夏の日の1993だろ。
昭和生まれをナメるなよ。
253:デフォルトの名無しさん
19/02/17 18:37:55.36 Rm6p2g7t0.net
調べてたらこんなのが出てきました
URLリンク(jscript.zouri.jp)
ちょっとずれてはいますが、ここで
// シートのマクロ関数を呼び出す
ExcelApp.Run( "MacroTest.xls!Sheet1.func1" );
ってのがあるから、標準モジュールだけじゃなくて、シートの関数も他のシートからも呼べるんだよね
マネてやってみたんだけどうまくいかん
254:デフォルトの名無しさん
19/02/17 18:52:24.20 EkiBf8gr0.net
いや、普通に、シートを指定するんじゃ駄目のかな。
>>206はThisworkbookに続けて関数名書いてるけど。
クラスモジュールもそうやって指定するでしょ?
255:デフォルトの名無しさん
19/02/17 18:53:32.60 X48frccGd.net
???
lngEle?なんかよりi,j,kの方がよっぽど良いだろ。
どんなスコープの場合でも特別な意味の無いループ変数だよ。
世界中で、さらにいうと他言語でも共有されてる価値観だろ。
まあ、ローカル以外で使われることは無いけど。
256:デフォルトの名無しさん
19/02/17 19:03:59.23 l7X7saNL0.net
シートモジュール特有の制約があるのかもしれないけど調べるのめんどい
257:デフォルトの名無しさん
19/02/17 19:07:37.68 X48frccGd.net
>>238
根本的に考え方が分かっていない。
まず、色んな所から呼び出したいものは標準モジュールに書く。
そして、そいつを色んな所から利用するように設計する。
君の場合はButtonClear_ClickをSheet1からもSheet2からも使いたいんだからButtonClear_Clickの中身を別関数にして、Sheet1のButtonClear_Clickからその関数を呼び出すようにする。
258:デフォルトの名無しさん
19/02/17 19:09:51.42 vi4O111wa.net
vbaerは他の言語やらんから非常識なコードを悪気なく書いてしまうんだよな
259:デフォルトの名無しさん
19/02/17 19:12:06.36 Rm6p2g7t0.net
>>252
ちょっと�
260:痰、んだなあ sheet1にPrivate Sub ButtonClear_Click() ってかいてるでしょ。 この処理はシート1に対してする処理なのです それをシート2から、ある特定のタイミングでしたいので、こうなっている 標準モジュールにあるものはもちろん呼べるけど、疑似的にもそうしないといけないのかな
261:デフォルトの名無しさん
19/02/17 19:19:24.91 l7X7saNL0.net
>>254
Worksheets(“シート名”).Range() = 処理
262:デフォルトの名無しさん
19/02/17 19:20:23.75 EkiBf8gr0.net
試したら、Sheet2.ButtonClear_Clickで動くわ。
もちろん、Privateは削除でね。
>>252
一般的にはそうだけど、
実際には出来るんだから、思い込みだよ。
263:デフォルトの名無しさん
19/02/17 19:22:02.36 l7X7saNL0.net
ていうかsheet1にコードを書いたとしてもsheet2がアクティブになってればそっちに書き込まれるからね
264:デフォルトの名無しさん
19/02/17 19:22:44.45 Rm6p2g7t0.net
>>256
Worksheets("sheet1").ButtonClear_Click
みたいな仰々しいことしなくても良かったのね。 ありがと。 あとでやってみる
265:デフォルトの名無しさん
19/02/17 19:33:19.37 l7X7saNL0.net
>>258
それは入れる物が間違ってる
266:デフォルトの名無しさん
19/02/17 19:50:26.47 X48frccGd.net
>>254
違わない。
設計の話をしている。
シート2からも呼び出すんだからシート1に対して行う処理であっても変わらん。
というか、基本的な所で噛み合ってないな。
どんな所に書いてもいきなりブックやシートの省略はしないのが基本だぞ。
Withを使うかオブジェクト変数で受けるのが基本だ。
267:デフォルトの名無しさん
19/02/17 19:56:06.48 Rm6p2g7t0.net
>>256
おかしいなあ。 オブジェクトが必要ですっていうエラーが出てきて動かない
268:デフォルトの名無しさん
19/02/17 19:56:59.16 9z/u7JpJ0.net
「ちょっと違うんだなあ 」は草
269:デフォルトの名無しさん
19/02/17 20:15:00.10 jhLaQWBk0.net
>>261
君面白いねえ
270:デフォルトの名無しさん
19/02/17 20:26:28.38 l7X7saNL0.net
>>261
Sheet1.Select
271:デフォルトの名無しさん
19/02/17 20:36:24.20 EkiBf8gr0.net
>>261
これでtestって出ない?
[シート1]
Sub ButtonClear_Click()
MsgBox "test"
End Sub
[シート2か標準モジュール]
Sub ButtonClear_Click()
Sheet1.ButtonClear_Click
End Sub
272:デフォルトの名無しさん
19/02/17 20:39:08.27 Rm6p2g7t0.net
>>264-265
sheet1.Selectをしなくても、セルへの代入だけなら出来た.。 シート2のボタンを押しても、シート1のセルに書き込まれる
でも、Cells(10,10).Selectみたいなセルの選択をするときは、sheet1.selectをしておかないとエラーになる
273:デフォルトの名無しさん
19/02/17 20:43:50.21 l7X7saNL0.net
>>266
書き込みたいシート名を指定する
Worksheets(“シート名”).cells(1,1) =
274:デフォルトの名無しさん
19/02/17 20:44:14.77 EkiBf8gr0.net
>>266
こうやって書けば。
Worksheets("Sheet2").Cells(10, 10).Value = "test"
275:デフォルトの名無しさん
19/02/17 20:46:06.79 Rm6p2g7t0.net
>>267-268
いやだから、書き込みだけなら、問題なく出来るって書いたじゃん
裏でも出来る
でも、セルの選択とかが入ると、シートをSelectして動かないとダメ
276:デフォルトの名無しさん
19/02/17 20:47:37.46 l7X7saNL0.net
>>269
そりゃそうでしょ
277:デフォルトの名無しさん
19/02/17 20:53:21.26 l7X7saNL0.net
つーかエラーメッセージ全部貼って見せて
278:デフォルトの名無しさん
19/02/17 21:43:11.83 de8FYcuQ0.net
vbaの関数ってデフォルトが参照渡しなんすね
やらかすとこだった
279:デフォルトの名無しさん
19/02/17 21:45:56.53 kxT8s3Mp0.net
お前らオブジェクトのこと全然わかってないんだな
馬鹿ばっか
280:デフォルトの名無しさん
19/02/17 21:57:57.43 l7X7saNL0.net
>>273
答えplz
281:デフォルトの名無しさん
19/02/17 23:04:18.50 t0Nzx7bGx.net
こんなスレ見てたら頭おかしなルで
282:デフォルトの名無しさん
19/02/17 23:11:53.07 kxT8s3Mp0.net
>>274
継承されたわけでもないオブジェクトから別のオブジェクトのメソッドをどうやって呼び出すかわからんのか?
馬鹿は死ねよ。
283:デフォルトの名無しさん
19/02/17 23:38:23.26 vi4O111wa.net
言い過ぎでは?
繊細な人だったら傷付くよ
284:デフォルトの名無しさん
19/02/17 23:57:36.39 t0Nzx7bGx.net
シート1内外から呼べるPublicな共通関数を作って、クリックイベントハンドラのコードと他モジュールのコードの双方から呼ぶようにすれば良いだけでは
イベントハンドラを直接コードユーザにコールさせようとするのはおかしい
285:デフォルトの名無しさん
19/02/18 00:01:45.68 WfgOED4y0.net
>>272
ByRefもByValも付けずに宣言するとそれはByRefになるって事をかな?
であれば既にやらかしてるのを気づかずにいる可能性があるから過去のモジュールを点検した方がいい
286:デフォルトの名無しさん
19/02/18 00:02:49.20 5bMGA+jIa.net
いやよく考えるとイベントハンドラを呼ぶのはおかしいがシート2クラスのメソッドを呼ぶだけなら別におかしくはなかった
それだけでは共通化する理由にはならない
287:デフォルトの名無しさん
19/02/18 00:59:55.76 hC76sm/R0.net
>>276
へーシートもオブジェクトなのか
全然意識してなかったわ
勉強になったよありがと
でもお前口悪いから友達いなさそうw
288:デフォルトの名無しさん
19/02/18 01:23:07.51 hC76sm/R0.net
シートモジュールに構造体宣言してハマった記憶がある
そういうことだったのか
289:デフォルトの名無しさん
19/02/18 01:23:55.49 5t9ctY5m0.net
頭が悪い 顔が悪い 目が悪い 口が悪い
性格も悪い 手癖も悪い 足腰も最近悪い
酒癖も悪い 女癖も悪い 寝つきも悪い
そんな俺でもその返事の仕方は失礼なんじゃないかな?
とは思うけど。
もしや高度なツンデレさんなのかな?
と、解釈して
次の方 ( ゚д゚)ノどうぞ
290:デフォルトの名無しさん
19/02/18 06:33:10.39 hC76sm/R0.net
きっと彼の親はVBAに殺されてしまったんだよ
291:デフォルトの名無しさん
19/02/18 08:08:58.79 MgpZvmd8x.net
シートもオブジェクトなのか、ってのはちょっと驚いたな
シートどころか自作フォームも含めてGUIで見て触れるもののほぼすべてがオブジェクトだぞ
292:デフォルトの名無しさん
19/02/18 08:18:13.27 8se8rGxR0.net
なんか、バカばっかりだなあ
>>269に他のシートにもアクセスできるって書いてあるだろ。何がオブジェクトだよ
ただ、セルのセレクトは出来ないって
293:デフォルトの名無しさん
19/02/18 08:58:38.38 AsxIQPE70.net
前にやってたユーザサポート業務を思い出した
294:デフォルトの名無しさん
19/02/18 12:38:44.05 UyrImbcld.net
>>286
バカはお前。
そのセルのセレクトができないと言ってる元の命令がオブジェクトがどういう階層になってるか分かってない典型的な例。
そういう人のコードだから、セレクトなんて必要無いだろうなと先読みしてるんだろう。
何しろセレクトすることなんて極めて殆ど書くことが無い(必要となることが無い)処理だからな。
295:デフォルトの名無しさん
19/02/18 13:13:11.83 qW3BE+Gz0.net
ブックもシートもセルもボタンもシェイプもみんなオブジェクトだよ
WindowsはOSそのものがオブジェクトの塊
そういうふうに設計されてる
296:デフォルトの名無しさん
19/02/18 13:49:41.69 uzxEynMwM.net
Selectionはイミィディエイトからはよく使う
297:デフォルトの名無しさん
19/02/18 16:12:57.29 JTiYKdtz0.net
化石観たいな臭いレスでも良いけど
もうちょっと面白いレスが観たいな
VBAネタもう飽きた
298:デフォルトの名無しさん
19/02/18 16:21:45.06 luqjRhnP0.net
URLリンク(japan.cnet.com)
「Microsoftにとって、(Officeのような)ウェブベースのアプリケーションサービス
を提供することは願ってもないことだろう。これにより、エンドユーザーや違法コピー
の問題をもっとしっかりコントロールできるようになる。しかも、大量にメディアを
用意したり、それを流通させるコストも不要になる」
--Garcia on Slashdot
299:デフォルトの名無しさん
19/02/18 16:23:02.33 L3SsO4kg0.net
>>292
誤爆してしまった。
スマソ。
300:デフォルトの名無しさん
19/02/18 17:39:58.04 xGyDNRFK0.net
VBAスレにまで来てVBAネタ飽きたって、こんなとこくる暇があったら病院行った方が良いんちゃう?
301:デフォルトの名無しさん
19/02/18 21:13:51.18 25ajLZ330.net
vbaおそすぎい…
302:デフォルトの名無しさん
19/02/18 21:25:29.27 Y1NxofRZx.net
Selectメソッドは記録マクロの記述のためだけに存在する命令と言ってもいいくらいのものだからな
実際に実務でSelectメソッドを書いたことは殆どない
特定のセル範囲(特に複数セル)が選択された状態を作り出すことに実務上の意味があるならば書かざるを得ないんだろうけど
303:デフォルトの名無しさん
19/02/18 21:53:14.97 eiV6jRN10.net
どうしてセレクチオンしないの~!
304:デフォルトの名無しさん
19/02/18 22:15:32.75 aFs+DxuY0.net
>>296
コードの最後に
cells(1,1).select
って書いておくのが僕
305:デフォルトの名無しさん
19/02/18 22:31:21.38 R8eupock0.net
カーソル位置の初期化によく使うけどな。Select
306:デフォルトの名無しさん
19/02/18 22:37:53.94 hG18nYywr.net
application.gotoを使う
307:デフォルトの名無しさん
19/02/18 22:51:42.46 Y1NxofRZx.net
スクロールの有無を選べるApplication.Gotoの方が小回りが効くわな
308:デフォルトの名無しさん
19/02/18 23:52:49.47 hC76sm/R0.net
SelectよりActivateの方がしっくりくる
309:デフォルトの名無しさん
19/02/19 00:02:24.54 mTnWFuG30.net
>>302
違いってなんだっけ?
310:デフォルトの名無しさん
19/02/19 00:21:46.10 XTzrMDQC0.net
selectは複数できる
acrivateは1つだけ
selectしたcellsはselectionで取得でき、
activateしたセルはActiveCell
また、
ActiveCellはsheetではなくapplicationのメンバ
Application.ActiveCell.Select
↓はできない
sheets(1).activeCell.Select
今色々試しただけだから、間違ってたらゴメン
311:デフォルトの名無しさん
19/02/19 08:36:38.55 9CovpibD0.net
>>304
Oh,thx.
312:デフォルトの名無しさん
19/02/19 11:46:22.25 9gUKp59aM.net
WebBrowserのフォームに文字列変数に入れたHTMLを反映させるのってどうすれば良いですか?
313:デフォルトの名無しさん
19/02/19 12:39:59.48 oemf1bOsd.net
>>306
説明が分かりにくい。
WebBrowserのフォーム
→フォームにWebBrowserコントロールを貼り付けたもの?
文字列変数に入れたHTML
→指定したURL?
フォ―ムにWebBrowserコントロール貼り付けて、指定したURLを表示させたいってこと?
314:デフォルトの名無しさん
19/02/19 12:42:06.27 oemf1bOsd.net
それともHTMLのソースコードを元にブラウザ表示させたいってこと?
315:デフォルトの名無しさん
19/02/19 13:02:37.15 XTzrMDQC0.net
>>306
input type="text"を変更したいんでしょ
メールアドレスに「123」を入れる例
めっちゃめんどくさいけどガンバレ
Private Sub UserForm_Activate()
WebBrowser1.Navigate ("URLリンク(opentype.jp))
End Sub
Private Sub UserForm_click()
Set hec = WebBrowser1.Document
Set mailaddress = hec.GetElementsByName("MailAdress2").Item(0)
mailaddress.Value = 123
End Sub
316:デフォルトの名無しさん
19/02/19 13:06:28.07 DYfM7cdrH.net
質問じゃないけどcsv取り込みでQueryTable使ったら感動した
ググるとほとんどLine Inputでやってるんだもんなぁ
317:デフォルトの名無しさん
19/02/19 13:10:41.92 mzDqOD0La.net
ExcelでJavaScriptが使えるみたいだけど、どんなことに使えるのでしょうか?
318:デフォルトの名無しさん
19/02/19 13:21:57.84 XTzrMDQC0.net
>>310
便利なんか?
住所の番地ってどうにかできるんかね
1-1が日付扱いになってしまう
>>311
jsがどうこうではなく、vbaが化石すぎる
jsは慣れれば超楽に書ける。これから覚える人は大分楽できるんじゃないかな
ただ、jsはところどころじゃあくなので気をつける必要がある
具体的にはundefined
319:デフォルトの名無しさん
19/02/19 13:30:09.72 mzDqOD0La.net
>>312
おぉ!レスありがとう😊
そっかぁvbaは化石か…
今職場で必要だから、業務を通して勉強してるんだよね。
JavaScriptは少し勉強してたけど、会社が受け入れてくれるかな。
320:デフォルトの名無しさん
19/02/19 13:35:17.78 XJA9DtkM0.net
>>296
広範囲のソートとかどうすんの?
321:デフォルトの名無しさん
19/02/19 13:44:22.98 XTzrMDQC0.net
>>313
幾つか忘れていた
jsのメリット
・jsはwebでも標準的な言語
・イラレのスクリプトもjsで動かす事もできる。ほとんど使わないけど
・googleSpreadsheetのマクロはjs
ただ、化石言語にもいいところはある。今までのノウハウがweb上に山程ある
そして仕様変更も20年なかったから、全コードがそのまま使える
(他の言語はバージョン違いでエラーが発生したり、全く動かなかったりする)
結局やることはエクセルのスクリプトなので、vbaでも十分ちゃ十分、
jsのノウハウが積み上がるまでは、vbaの方が楽出来ると思う
322:デフォルトの名無しさん
19/02/19 13:55:09.79 mzDqOD0La.net
>>315
なるほどなるほど。
詳しく説明してくれてありがとう!
たしかにvbaは歴史があるから、調べてるのは楽だよね。
JavaScriptはしばらく家で勉強した方が良さそうだねw
時期をみて上司に提案してみるよ!
323:デフォルトの名無しさん
19/02/19 14:12:13.94 yAUMSA3na.net
Java script は
VBA → VB.Net → ASP.net って勉強して行く過程で勉強することになるから
そんなに慌てなくてもいいよ
324:デフォルトの名無しさん
19/02/19 14:15:00.77 D8b3v+FoM.net
>>317
ドヤ顔のところ申し訳ないけど、ASP.NET(最新のものではなくVBerが知っている方のASP.NET)も化石だよ
325:デフォルトの名無しさん
19/02/19 14:16:57.12 D8b3v+FoM.net
ちなみに最新のASP.NETと呼ばれるものはVBer達がよく知っているASP.NETとは全く互換性がない
それどころか.NET Frameworkすら切り捨てた
326:デフォルトの名無しさん
19/02/19 14:24:40.78 XTzrMDQC0.net
>>319
知らなかった、昔のASP.NETの印象しかない。名前が完全に足引っ張ってる
327:デフォルトの名無しさん
19/02/19 15:20:23.15 oSkNfL9QM.net
>>307
>>309
説明不足すみませんでした
ユーザーフォームにwebBrowserのコントロールを張り付けて、そこにURL指定ではなくて直接htmlの文章を書き込みたいです。
328:デフォルトの名無しさん
19/02/19 15:44:15.07 XTzrMDQC0.net
>>321
かなりめんどくさいことをしている気がする
やりたい事はこれじゃないんじゃないか
Private Sub UserForm_activate()
'多分一回呼ばないとダメ
WebBrowser1.Navigate ("URLリンク(example.com"))
End Sub
Private Sub UserForm_Click()
html = "<div>foo</div>"
WebBrowser1.Document.body.InnerHtml = html
End Sub