X



Excel VBA 質問スレ Part59
レス数が1000を超えています。これ以上書き込みはできません。
0005デフォルトの名無しさん (ワッチョイ 8deb-/WZR)
垢版 |
2019/02/09(土) 21:48:35.35ID:dlyNQvdo0
前スレ終了直前でスルーされてしまった質問です。お願いします。

あるファイルに、
on error goto err
******
exit sub
err:
msgbox err.description
end sub


こういうコードをたくさん書いてきました。
しかし、エラーが出たときに、どのプロシージャで発生したのか知りたくなり、
msgbox err.description & このプロシージャ名
に変更したくなりました。
「このプロシージャ名」を書く方法ってあるのでしょうか?
0006デフォルトの名無しさん (ワッチョイ 911f-Q5xa)
垢版 |
2019/02/09(土) 22:15:26.08ID:J8bfqgzv0
C#で作成したライブリファイルをビルドしてtest.dllファイルを作成し仮にデスクトップに置きました。
中身は
public string[] GetData(string path,string file)
{
//処理
}

これをVBAで実行したのですが、標準モジュールでどう宣言したらできますか?
そもそも出来るんですか?

Declare Function strData Lib "???" Alias "???" () As string()
これを使うんですよね?
0008デフォルトの名無しさん (ワッチョイ a969-z8kj)
垢版 |
2019/02/09(土) 22:39:52.86ID:M8bBhNwV0
エクセルvba勉強始めてるんですけど
言語がなんかすきになれないです
オブジェクトを生成してそれを操作するってのばっかりにみえるんですが
それならいっそパイソンやら使いやすい言語でcomオブジェクトからエクセルを操作したほうがいいんでしょうか?
0009デフォルトの名無しさん (ワッチョイ a2a2-/WZR)
垢版 |
2019/02/10(日) 00:05:20.18ID:cpoaXViK0
要望2だけ反映させてました
https://www.axfc.net/u/3958630
変更点
乱数はマイナスも作成できるようになりました
文字シャッフル機能を追加しました
ケンブリッジのあれも取り入れてみました

要望1はいいと言うことなのでこれで終わりたいと思います。
スレ汚し失礼しました。
0011デフォルトの名無しさん (ワッチョイ 25ce-0b7p)
垢版 |
2019/02/10(日) 03:26:25.40ID:5I+kynYZ0
>>8
別の言語でエクセルの操作はおすすめできない
やるならワークブック/ワークシートオブジェクトなどを操作した方がいい
オブジェクトを操作するだけならわざわざ高いOfficeも買わなくていいし
0013デフォルトの名無しさん (アウアウクー MM91-eF01)
垢版 |
2019/02/10(日) 08:29:51.15ID:nwYV/fdtM
なんかすみませんね。深夜睡眠をけずってまでやってらったようで、、。ツールありがとうございます。
あとはこちらでいただいたツールをベースに必要に応じてカスタマイズします。
0014デフォルトの名無しさん (ワッチョイ e188-drk2)
垢版 |
2019/02/10(日) 09:22:45.87ID:adWOvpgi0
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ならいろいろあるようですが
0016デフォルトの名無しさん (ワッチョイ 1df9-n/rh)
垢版 |
2019/02/10(日) 09:54:47.81ID:px4mCHlG0
>>14
JScriptは良くわからんが・・Javaは結構したけど
見当違いなら申し訳ないが
既にExcelが起動していて、シート1が選択され
範囲が選択されている状況で、JScriptを動かしているんで良いですよね
0018デフォルトの名無しさん (アークセー Sxd1-Hrf8)
垢版 |
2019/02/10(日) 10:29:08.47ID:D1+mLGbSx
>>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;

でいけるんじゃないかな
試してないから間違ってたらごめん
0019デフォルトの名無しさん (ワッチョイ 1df9-n/rh)
垢版 |
2019/02/10(日) 10:48:51.96ID:px4mCHlG0
>>8
昔は、メモリーの領域を分け合って使ってたけど
いまわ全てオブジェクトと思え
エクセルは色々このオブジェクトの使い方が説明されていて
機能も多い
いやならすべて作ればとなるが、所詮何も出来ないだろ
0022デフォルトの名無しさん (ワッチョイ e188-drk2)
垢版 |
2019/02/10(日) 11:29:32.47ID:adWOvpgi0
>>18
ありがとうございます!

それで動きました。 どこでそういうのは調べるのでしょうか。 なかなかググってもわかりません

>>15
最初にJScriptを始めたとき、ネットでJScriptの方が初心者向けにエクセルの操作とかわかりやすい記述が
見つかったので、JScriptを始めたのですが、VBSだと、VBAとぼとんど同じプロパティで同じことができますか?
そうなら、VBSに移ろうかな
0024デフォルトの名無しさん (アークセー Sxd1-Hrf8)
垢版 |
2019/02/10(日) 12:35:46.47ID:YUFMtInCx
>>22
今回の質問はエクセルのオブジェクトモデルに忠実に従えば解決するものだよ
VBS含め他のどんな言語を選択しようが、そのあたりの事情は変わらない

具体的には、今回はSelectionへのアクセス方法がおかしかったわけで、
MSDNリファレンスのプロパティ一覧を見たり、VBEのオブジェクトブラウザでプロパティを検索したりすれば、
Worksheetオブジェクトには現在の選択範囲へのアクセスを提供するSelectionプロパティがないことや、
SelectionプロパティはApplicationオブジェクトのメンバとして実装されていることが分かる
0027デフォルトの名無しさん (アークセー Sxd1-Hrf8)
垢版 |
2019/02/10(日) 12:56:37.91ID:YUFMtInCx
>>26
元の質問のサンプルはsheet.Selectionという式の構文が間違っているので、仮にシートを選択していようが選択範囲は取れない
あと、シート上のSelectionの情報を取るだけなら画面遷移を伴うSelectではなくActivateで十分だろう
0028デフォルトの名無しさん (ワッチョイ e188-drk2)
垢版 |
2019/02/10(日) 13:00:02.97ID:adWOvpgi0
>>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
0029デフォルトの名無しさん (ワッチョイ 1df9-n/rh)
垢版 |
2019/02/10(日) 13:03:50.84ID:px4mCHlG0
>>27
すまないな
>シート上のSelectionの情報を取るだけなら画面遷移を伴うSelectではなくActivateで十分
実質的にどう違うかわからないので申し訳ありませんが教えていただけませんか
0030デフォルトの名無しさん (アークセー Sxd1-Hrf8)
垢版 |
2019/02/10(日) 13:14:52.82ID:YUFMtInCx
>>29
Selectによる画面遷移はユーザーとの対話を想定した処理で、当然描画処理の負荷がかかる
プログラム上で参照するアクティブなオブジェクトを切り替えるだけならSelectはしなくて良い
0033デフォルトの名無しさん (ワッチョイ e188-drk2)
垢版 |
2019/02/10(日) 13:44:31.83ID:adWOvpgi0
>>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
と一旦とってからの方がやりやすいですね。ありがとうございました
0039デフォルトの名無しさん (ドコグロ MM09-/S9r)
垢版 |
2019/02/10(日) 18:46:31.86ID:96GWWqq3M
C++で橋渡しするならC++/CLIでできるね
でもそんな面倒なことをするより普通にexe作るかpowershell書くかして別プロセスとして呼べばいいよ
データの受け渡しはコマンドライン引数なり標準入出力なりを使えばよい
0046デフォルトの名無しさん (JP 0H16-KbRv)
垢版 |
2019/02/11(月) 15:17:21.04ID:PhhkhwtYH
>>5
CodeModuleプロパティでなんかできそうだけど使ったことないからわかんね
0049デフォルトの名無しさん (ワッチョイ dd0b-VUEs)
垢版 |
2019/02/11(月) 18:43:45.66ID:fA09NaPq0
>>12
のダウンロードした回数多くないか?
有用なツールだと認められた証だろう。作った人は自慢していいよ
0051デフォルトの名無しさん (ワッチョイ cdca-/S9r)
垢版 |
2019/02/11(月) 22:38:05.08ID:9CUrx5/r0
このスレの人ってやっぱりプログラマーが多いんですか?
それなりにVBA使えるようになった事務職なんですが、転職を考えています
想像してはいたんですが、VBAで職探しするとプログラマーばっかりですね

VBA活かせる仕事ってやっぱりプログラマーになっちゃうんですかね
0052デフォルトの名無しさん (ドコグロ MMca-/S9r)
垢版 |
2019/02/11(月) 22:48:43.99ID:+VAWjoKJM
>>51
プログラマの定義から自明だろう
VBAのスキルだけで仕事するってことはVBAでマクロ作ること自体を仕事にするってことだろ?
それは即ちプログラマに他ならない
嫌なら他のスキルを身につけた上でその補助道具としてVBAを使うことを考えなさい
0054デフォルトの名無しさん (ドコグロ MMca-/S9r)
垢版 |
2019/02/11(月) 23:04:40.76ID:+VAWjoKJM
あとはIT業界でプログラマ以外で入りやすいのはシステムオペレータやコールセンター
VBAを使う機会は少ないかもしれないけどVBAを習得できる程度の頭があるならそれなりに責任たある立場(バイトリーダーくらいを想像すればいい)にはなれるんじゃないかな
0055デフォルトの名無しさん (ワッチョイ 6e2c-V6Wy)
垢版 |
2019/02/11(月) 23:51:16.39ID:X8tlYFxV0
Excel エンジニアから、ステップアップしてプログラマーになった人は、たいてい、Ruby on Rails !
まず、Ruby・Sinatra から、web フレームワークを始める

YouTube にも、そういう成功した人たちの動画がある
0056デフォルトの名無しさん (ワッチョイ cdca-/S9r)
垢版 |
2019/02/11(月) 23:54:44.08ID:9CUrx5/r0
>>52
経理財務畑で10年働いてるので、その補佐としてVBA使ってる現状です
VBA楽しいので、そればっかりの仕事はしたくないんです
たぶん嫌になっちゃうので。
なのでIT業界に行きたいわけじゃないんです

でも、VBAで探すとITばっかりだなーって悩んでるんです
0057デフォルトの名無しさん (ワッチョイ f901-XNIb)
垢版 |
2019/02/12(火) 00:22:18.17ID:6UhGKpIA0
VBAは習得にかかる時間は他の言語覚えるのと同じくらい?
それとも簡単?
0059デフォルトの名無しさん (ドコグロ MMca-/S9r)
垢版 |
2019/02/12(火) 00:57:29.86ID:J2uuh0x+M
>>57
同じレベルを求めるなら同じ
でもVBAは自称「VBAできます(キリッ」のレベルが他言語比で大幅に低いから、
人前で習得したと言っていいレベルに達するまでの時間は他言語よりずっと短い
0060デフォルトの名無しさん (ワッチョイ f901-KbRv)
垢版 |
2019/02/12(火) 01:28:22.73ID:bkolxWEM0
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

できました!
0063デフォルトの名無しさん (アウアウエー Sa0a-DOJB)
垢版 |
2019/02/12(火) 07:32:55.78ID:SvKCMiwAa
>>60
エラー処理(例外処理)が緩すぎる
やり直し
0064デフォルトの名無しさん (ブーイモ MMcd-RyKv)
垢版 |
2019/02/12(火) 08:01:42.96ID:yCgE5JHqM
>>56
仕事を効率化するシステムはある程度自分で作るのが当たり前の時代が来る(かもしれない)から
IT業界でなくてもプログラミングは必須になる(かも略
ただしそのツールの主流はVBAじゃないだろうね
いろんなツールや他言語も覚えて他人の仕事をどんどん奪ってください。
そうすれば時代の流れを加速することになるのでヒーローになれます。
0065デフォルトの名無しさん (ワッチョイ fe7c-SgG7)
垢版 |
2019/02/12(火) 11:26:12.35ID:8lolhehX0
MSがExcelにPython載せるっつってたから
君が卒業して社会に出る頃にはVBAは消えてるかも知れない
0066デフォルトの名無しさん (ブーイモ MMcd-/3is)
垢版 |
2019/02/12(火) 13:55:06.88ID:w218beJOM
>>64
まず型はいらない。
コマンドや関数はフローチャートの図形みたいな視覚化とパラメータで作成。
論理エラー以外のエラーは出ない仕組み。
やろうとすればいくらでもできるんじゃね?
0075デフォルトの名無しさん (ワッチョイ a2a2-/WZR)
垢版 |
2019/02/12(火) 19:49:06.70ID:gxc4B4g80
>>13さんもう見てないかな
自分で使ってみたけどなんか違う・・・と思って考えてみたら
問題のシャッフル出題(各問1回だけシャッフルして出題)が足りないという結論に
バグもつぶしたし、まだ見てるならレスください
0076デフォルトの名無しさん (ササクッテロル Spd1-P0T6)
垢版 |
2019/02/12(火) 21:06:37.12ID:N98Fn342p
すみません、こういうのは出来ますか。

How are you? I’m looking
forward to see you.

How are you?
I’m looking forward to see you.
になおす。

要は、中途半端な改行がある文を、一行にまとめる。
0078デフォルトの名無しさん (ワッチョイ 822f-HdPi)
垢版 |
2019/02/12(火) 21:30:27.20ID:u96ReIy/0
>>76
改行をなくすだけなら比較的簡単にできる
適切な位置で改行しろってなら、適切な位置を事前に完全に定義すればまぁできる

>>77
おれは別に避けたいとは思ってないしその必要もないけど
テキスト以外のプログラミングには従来のプログラミング言語にない可能性だってあるしな
0079デフォルトの名無しさん (ワッチョイ 827c-1PgY)
垢版 |
2019/02/12(火) 21:39:40.48ID:w+cVMhLi0
DOSはDOSで使いやすかったと思う。
Windows出たときいらねーべって思ってたけど今思うと3.1はやっぱりいらない。
0080デフォルトの名無しさん (ササクッテロル Spd1-P0T6)
垢版 |
2019/02/12(火) 21:45:44.99ID:N98Fn342p
>>78
76です。
すみません。それでは、
.で改行できるようにお願い致します。
0082デフォルトの名無しさん (ササクッテロル Spd1-P0T6)
垢版 |
2019/02/12(火) 21:55:12.47ID:N98Fn342p
>>81
改行を削除できますか。

仕事で、大量の英文を整理したいので困ってます。
0083デフォルトの名無しさん (アウアウウー Sa05-BKX2)
垢版 |
2019/02/12(火) 22:00:43.06ID:1aNudvIBa
線つなぐやつはサブルーチンが正体不明のアイコンになるからものすごくわかりにくい
逆にわかりやすいプログラムを描くには高度なアイコンデザインセンスが必要ということだ
そんなの天才にしか使いこなせない
0085デフォルトの名無しさん (アウアウクー MM91-q7hS)
垢版 |
2019/02/12(火) 22:41:31.90ID:CcMjC8kpM
>>84
セル内の文字列を対象にしてると思うからエディタでは無理では?分からないから適当に言うんだけど。
0086デフォルトの名無しさん (ワッチョイ 822f-HdPi)
垢版 |
2019/02/12(火) 23:08:07.22ID:u96ReIy/0
>>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
0087デフォルトの名無しさん (ワッチョイ f901-YOpM)
垢版 |
2019/02/12(火) 23:38:26.31ID:ja5MNGvN0
>>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
0088デフォルトの名無しさん (アウアウクー MM91-q7hS)
垢版 |
2019/02/12(火) 23:44:44.19ID:CcMjC8kpM
>>75
最新版は5ですよね?使ってみましたがオブジェクトエラーが起きてどこで停止しているかみてみると、ソート処理時に停止する。

そこで4_2をベースにこちらでカスタマイズして、ボタン1つでセル内の文字列をシャッフルするコードをネットから拾ってきました。
ついでに縦横の切り替えもボタンで実現してます。

やりていことこ実現できているので満足です
0091デフォルトの名無しさん (ワッチョイ e101-P0T6)
垢版 |
2019/02/13(水) 06:35:13.37ID:9485a3fT0
>>84
例えば?メモ帳とか?

改行を無くす置換はありますか?
0093デフォルトの名無しさん (ワッチョイ f901-P0T6)
垢版 |
2019/02/13(水) 07:30:01.13ID:AhLCWHg20
>>92
ありがとうございます。一つのセルに最大どんだけテキスト貼れるかですね
0094デフォルトの名無しさん (ワッチョイ f901-P0T6)
垢版 |
2019/02/13(水) 07:36:07.18ID:QsqoJnTp0
>>92
cntl+jか。知らなかった。ほかのワードとかでも使えるかな
0096デフォルトの名無しさん (JP 0H16-KbRv)
垢版 |
2019/02/13(水) 08:07:53.15ID:kNKWDOP4H
>>95
ヘッダの話なら1個ずつ書いてくしかない
0099デフォルトの名無しさん (ワッチョイ 1df9-n/rh)
垢版 |
2019/02/13(水) 09:17:10.81ID:s1ZD6WV/0
「何の条件」で「何を」「どのようにしたいか」の中で「何の条件で」が出てないな
「何を」「どのようにしたいか」も一部の条件しか出てない気がする
連想ゲームじゃないんだから質問はちゃんとかけよ
0100デフォルトの名無しさん (ワッチョイ 1df9-n/rh)
垢版 |
2019/02/13(水) 10:05:00.38ID:s1ZD6WV/0
>>76
この質問は
Excelの枠に配置で、折り返して全体を表示するに
以下の改行のない文を貼り付けた時に
How are you? I’m looking forward to see you.
セルの幅に合う位置で改行されるのを思いの位置で改行したい
ってことだろ、思いの位置が明文化されないとな
例えば英文であるかわからんが「...」みたいな文とか「!!」みたいなとかもありそうだしな
0101デフォルトの名無しさん (JP 0H16-KbRv)
垢版 |
2019/02/13(水) 10:59:06.69ID:kNKWDOP4H
>>95
あと以下のようにしておくと面倒でなくなるよ

cns_COL_ID = “A”
Range(cns_COL_ID & 1) = “ID”
0104デフォルトの名無しさん (ワッチョイ e188-drk2)
垢版 |
2019/02/13(水) 14:06:51.14ID:cLVWJ/NN0
セル上でドラッグドロップしたら、それでプログラムが動くようなことってできますか
たとえば、縦1列に20個のデータが入っていて、その1つを別の場所に
ドラッグドロップすると順番が入れ替わるようにするとか
0105デフォルトの名無しさん (JP 0H16-KbRv)
垢版 |
2019/02/13(水) 14:22:50.50ID:kNKWDOP4H
>>104
こうかな

Sub Worksheet_change(ByVal Target As Range)
if target.column = 貼り付けた列番号 then 配列に突っ込む
配列をソートする
配列をセルに書き込む
End Sub
0107デフォルトの名無しさん (JP 0H16-KbRv)
垢版 |
2019/02/13(水) 14:45:16.60ID:kNKWDOP4H
>>106
あとApplication.Enableevents = Falseしないと配列をセルに書く時にWorksheet_changeが起きて無限ループするから気を付けて
0110デフォルトの名無しさん (ササクッテロル Spd1-P0T6)
垢版 |
2019/02/13(水) 19:29:04.53ID:yofO24jUp
>>94
置換前にcntl+jと入れると、置換ボタンが押せない。
0114デフォルトの名無しさん (ワッチョイ f901-KbRv)
垢版 |
2019/02/13(水) 20:39:49.89ID:9c/UwGiq0
>>113
楽というかマナー
意味の分かる定数で定義することで他人がプログラムを追わなくても理解できるようになる
0117デフォルトの名無しさん (オイコラミネオ MM16-duX/)
垢版 |
2019/02/13(水) 20:54:23.96ID:vtryBqN5M
vba初心者です。
マウスイベントやスリープなどのapi を使って
会社で使うツールを半自動化してますが、
こういうアナログな方法ではなく、
マウスでクリックしなくてもツールがアクティブになったり、
スリープではなく画面が遷移したのを読み取って次の命令を実行してくれるような
ものを作るにはどういう学問を学べばいいですか?
0121デフォルトの名無しさん (ワッチョイ 911f-Q5xa)
垢版 |
2019/02/13(水) 23:29:11.25ID:vsTJ7JQU0
自作した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
0122デフォルトの名無しさん (ワッチョイ 27f9-xnHp)
垢版 |
2019/02/14(木) 10:46:56.68ID:oxBa5+ju0
>>121
まあ、気楽に回答しておく
>〇 自分で付ける関数名??
その通り
>△ dllファイルの場所フルパス??
Pathが通ってればフルパスでなくてもよい
>□ dllファイル内の何か?
別名宣言できる・・・まあ、調べろ

>ちなみにこれでも似たような事ができるんですか?
>Dim tarApp As Variant
>Set tarApp = CreateObject(“◎◎“)
> tarApp.Documents.Open FileName:="〇〇"
>Set wdApp = Nothing
書いている意味が理解できてないだろう、Office系のソフトはちゃんとしたルールで作られてるが
こんなこと気にする前に、有効なDllを作ってみろよ
尚、理解できてないことが丸わかり
0126デフォルトの名無しさん (ワッチョイ 874f-5sVJ)
垢版 |
2019/02/14(木) 13:20:00.69ID:chn4JYyT0
たとえば、A1からC50までデータがあってA列をキーにソートしたいのですが、
途中たとえば、10行、15行、20−25行は抜かしたいのです。 これらにはコメントや他のものが入ってるので
でもそれらを抜かして全体でソートしたいのですが、Unionで繋いでやったら複数のレンジは出来ないみたいな
エラーを返されました
何かいい方法はないでしょうか
0127デフォルトの名無しさん (ワッチョイ 874f-5sVJ)
垢版 |
2019/02/14(木) 13:50:43.73ID:chn4JYyT0
例えば、画面表示は止めて、メモリ上で行を移動させてソートする行をまとめてからソートして、
また行をもとに移動させてから、画面上に結果を表示とか、出来ると可能性があると思うのですが
0128デフォルトの名無しさん (ワッチョイ ff6f-dKms)
垢版 |
2019/02/14(木) 14:23:28.89ID:sSBdRoDO0
>>126
if i = 対象行 then
行入替え
end if
とかでいいんじゃね?
0131デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/14(木) 17:59:11.87ID:bFGkVmlp0
dllってよくわかんないだけどvbsのexecuteglobalみたいな感じ?
0132デフォルトの名無しさん (ワッチョイ 874f-5sVJ)
垢版 |
2019/02/14(木) 19:55:09.02ID:chn4JYyT0
>>129
マジかあ。  やってみた。 出来てる

なんだよ、プログラム作っっちゃった。 ソートしないところを一旦別に移して圧縮してソートしてから
下に戻すってやつ
なんだよ、 この2時間返して w
0133デフォルトの名無しさん (アメ MM6b-+q6E)
垢版 |
2019/02/14(木) 22:52:59.46ID:nNkHGtvOM
>>132
まあ、普通にデータはテーブルでもてば良いだけだろ
整形は別シートででーたをさんしょう
0135デフォルトの名無しさん (ワッチョイ dfeb-A2tD)
垢版 |
2019/02/15(金) 00:49:30.00ID:6QKgXGI40
よろしくお願いいたします。

VBAで、半角カナ文字列を与えると、その文字列の中にある、
ァィゥェォャュョッ などの小さい字をアイウエオヤユヨツなどの大きい字(半角カナ)に変換して返す
functionを作りたいのですが、どう書いていいのかわかりません。

ひとつずつ、ァをアに変換、ィをイに変換、のように書くしかありませんか?
まとめて書く方法ってあるのでしょうか?
0137デフォルトの名無しさん (ワッチョイ 5f7c-blJ9)
垢版 |
2019/02/15(金) 01:18:13.72ID:vhn0rFgQ0
60項目7万件のjsonデータ読んで保存した。
開いたらモジュールとフォームが破損って何なんだよ。うう吐きそうだ。
10Gじゃメモリたりなかったのか?いや、それならそうメッセージがでるはず。
まさかこんなんでコード飛ぶとは思わなかったからバックアップは取ってない。
10分おきの自動バックアップのデータはあったけどデータ取るのに2日かかったからとっくに消えてる。
もう作る気おきない。
参った。
0140デフォルトの名無しさん (ワッチョイ 872d-7G9U)
垢版 |
2019/02/15(金) 01:23:24.10ID:NXuVhChr0
>>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


動くかわからんけどお試しあれ。
0141デフォルトの名無しさん (ワッチョイ e7ce-1ffV)
垢版 |
2019/02/15(金) 01:37:27.77ID:6R3QhjK00
>>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
0143136 (ワッチョイ 7f2c-Ioh3)
垢版 |
2019/02/15(金) 01:38:19.40ID:BkaZ3+610
Ruby では、

str = "ァィゥェォャュョッあ"

puts str.tr( "ァィゥェォャュョッ", "アイウエオヤユヨツ" )
#=> アイウエオヤユヨツあ
0144デフォルトの名無しさん (ワッチョイ e7ce-1ffV)
垢版 |
2019/02/15(金) 01:43:51.10ID:6R3QhjK00
もっとシンプルなのができた

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
0145デフォルトの名無しさん (ワッチョイ e7ce-1ffV)
垢版 |
2019/02/15(金) 01:46:51.97ID:6R3QhjK00
しつこいけど、これで最後

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
0146デフォルトの名無しさん (ワッチョイ e7ce-1ffV)
垢版 |
2019/02/15(金) 01:53:45.99ID:6R3QhjK00
最後と言いながらもう一度
これってまだまだコンパクトにできるパターンだな

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
0147デフォルトの名無しさん (ワッチョイ e7ce-1ffV)
垢版 |
2019/02/15(金) 02:00:19.18ID:6R3QhjK00
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
0148デフォルトの名無しさん (アメ MM6b-+q6E)
垢版 |
2019/02/15(金) 09:21:30.82ID:U9ClSHCYM
>>147
横レスだけど
他の言語に比べかったるいけどおいておいて
変換に使う文字列または配列はfunctionの外
変数はアドレス渡し function内で文字列を書き換え
変更が有った場合 true なかった場合false
使い勝手と動作速度を優先する
とスマホで書いてみる
0149デフォルトの名無しさん (ブーイモ MMcf-O/Qv)
垢版 |
2019/02/15(金) 09:40:41.96ID:GIzZTHxJM
>>147
たしかにs1を書き換えつつまたそれを返すというのは無駄だ。
ByValで受けて書き換えた結果を返すかByRefのままでSubにするかだと思う。
Booleanで返すのは今時の趣味には合わないんじゃないかな。
0150デフォルトの名無しさん (ワッチョイ 27f9-xnHp)
垢版 |
2019/02/15(金) 09:58:15.95ID:FxoJIoi60
>>149
セルを書き換えるべきか書き換えないかの判断をする
全てのセルの書き換えは時間もかかるし、空白のセルもある
必要ないデータは書き換えないでいいようにする

if kanacaps(s1) then cells(i,j) = s1
のように
0152デフォルトの名無しさん (ワッチョイ 27f9-xnHp)
垢版 |
2019/02/15(金) 11:44:10.23ID:FxoJIoi60
>>151
だったら、このスレ関係ないな本当にそう思うのか?
自分の主張じゃなく要求者の状況を読まなければ意味ない
150の書き方でならシート全てを変換するfunctionも簡単にできるけど
お題を読めないのは厳しいな
0153デフォルトの名無しさん (ワッチョイ e7ce-1ffV)
垢版 |
2019/02/15(金) 11:49:05.00ID:6R3QhjK00
データ量と出現頻度と、呼び出し側でのデータの持ち方がわからない限り、最適解は出せないと思う
用途はなんだろう?半角カナが通るのにカナ小文字が使えないシステムなんて、大昔のオンラインシステムぐらいしか思い付かんけど
0160デフォルトの名無しさん (ブーイモ MM6b-OxnY)
垢版 |
2019/02/15(金) 12:42:06.25ID:Aa3kOoYYM
俺は理解したいけど使うの自分ならまぁ動けば良いや派です

話題変わるけど今はselenium使えないの?
firefox操作したいけど色々なサイトのコード試しても動かんのだけど最新のseleniumVBAでfirefox操作するVBA使ってる人居たらfirefox起動からログイン処理するコード貼ってほしい
0163デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/15(金) 13:05:41.84ID:QYjRxS22H
配列を使わざるを得ないなら二次元配列に変更前と変更後を並べて突っ込む
0173デフォルトの名無しさん (ドコグロ MM3b-3Kdw)
垢版 |
2019/02/15(金) 17:36:05.74ID:Qph8FA2WM
>>170-172
だから
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
とかが不思議ちゃんて言われてるんだよ
セルへの書き込み程度でドヤるような奴だからしょうがないだろうけど w
0175デフォルトの名無しさん (ワッチョイ c701-OvAq)
垢版 |
2019/02/15(金) 19:18:49.62ID:FIDflx8L0
Range("A1")="名前"
Range("A2")="住所"
Range("A3")="性別"
Range("A4")="郵便番号"
みたいな複数にわかる処理を
Range("A1:A4")="名前、住所、性別、郵便番号"みたいな感じ(もちろんこれではダメ)で
一行(一回の処理)でまとめて設定できるような方法ってありますか?
0176デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/15(金) 19:20:38.46ID:kIiggQTh0
>>175
ある
0177デフォルトの名無しさん (ブーイモ MMcf-O/Qv)
垢版 |
2019/02/15(金) 19:21:12.65ID:GIzZTHxJM
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))
これも書き換えがあったかどうかを判定する必要はない。
普通は後者を選ぶだろう。
0178デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/15(金) 19:28:49.74ID:kIiggQTh0
>>177
これダメなやつ
最も負荷の掛かるセルへのアクセスは最小限にするべき
コードが短ければいいってもんじゃない
0180デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/15(金) 20:01:27.87ID:kIiggQTh0
>>179
自分で処理時間計ってみれば?
0182デフォルトの名無しさん (アメ MM6b-+q6E)
垢版 |
2019/02/15(金) 22:25:19.73ID:f25ghBxYM
まあ、例えばひづ
0183デフォルトの名無しさん (アメ MM6b-+q6E)
垢版 |
2019/02/15(金) 22:31:54.84ID:f25ghBxYM
スマホは書いてる途中で書き込んじゃう癖が有って申し訳ない
例えば日付を月日で表しているセルを文字列で取得すると月日の文字が取得できる
その文字をそのセルに書き込むと数値としての月日じゃあなくなるよな
不用意に変換しないことも大事なんだがな
0185デフォルトの名無しさん (ワッチョイ a7da-cT+3)
垢版 |
2019/02/15(金) 23:38:50.38ID:e71gRKct0
凄いよな。
何でこうも、どんな用途に使うのかわからないような処理ばっか出てくるんだか。

そのうち、VLOOKUP(縦検索)でもHLOOKUP(横検索)でもない、
斜め検索のJLOOKUP作れとか言い出しそうだな。
0188デフォルトの名無しさん (スフッ Sd7f-1ffV)
垢版 |
2019/02/16(土) 01:38:49.39ID:tkdqnLOdd
最初の質問は>>135だぞ
処理したいのは半角カナ、作りたいのはFunction、関数の返す値は修正後の文字列と仕様が明記されてるのに、どうしてBooleanだのByRefだのが出てくるんだよ
おまけに全角とか言い出すやつまで出てくるし
0190デフォルトの名無しさん (アメ MM6b-+q6E)
垢版 |
2019/02/16(土) 02:22:26.92ID:Q7QEPoKZM
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(A1,"ァ","ア"),"ィ","イ"),"ゥ","ウ"),"ェ","エ"),"ォ","オ"),"ャ","ヤ")
,"ュ","ユ"),"ョ","ヨ"),"ッ","ツ")
0191デフォルトの名無しさん (ブーイモ MM6b-KyI1)
垢版 |
2019/02/16(土) 05:24:29.40ID:evls1zM4M
>>190
ワラ
0194デフォルトの名無しさん (ワッチョイ 5f01-3Kdw)
垢版 |
2019/02/16(土) 07:53:50.02ID:q1DAaOKG0
>>188-189
そこは最初から違和感あったわ
> VBAで、半角カナ文字列を与えると
って書いてて
> ァィゥェォャュョッ
って全角で書いてるからネタだと思って放置してたけどァィゥェォッュョみたいな文字ってスマホだと入力できないのな
(いや、できるかも知れんが俺にはわからんかったのでこれはコピペで入力した)
まあそれならそうと書いて欲しい

この手の変換はそれなりに需要があるみたいで
カタカナ 小さい文字 変換 vba
とかでググるとそれなりにヒットする
とりあえずは
https://www.relief.jp/docs/002223.html
とかを参考にすればいいと思う
0197デフォルトの名無しさん (ワッチョイ 0711-l0e6)
垢版 |
2019/02/16(土) 13:35:38.12ID:V3lev6Wl0
>>175
1) Range("A1:A4") = WorksheetFunction.Transpose(Split("名前、住所、性別、郵便番号", "、"))

2) Range("A1:A4") = WorksheetFunction.Transpose(Array("名前", "住所", "性別", "郵便番号"))

3) Range("A1:A4") = [{"名前";"住所";"性別";"郵便番号"}]
0199デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/16(土) 14:26:02.22ID:Y5C6RkaG0
二次元配列は何が入ってるか分かりにくいしネストも増えやすいから構造体かクラスを使う
0201デフォルトの名無しさん (ワッチョイ c701-Fd8k)
垢版 |
2019/02/16(土) 15:38:49.30ID:XgEm9HUa0
>>199
XLシートが二次元の表なんだから難しくないだろ。
三次元なら立体を思い浮かべればいい。四次元になると時間をイメージかな。そこまでやったことないからわからん。
三次元までのネストの深さは気にならないな… ifとかで増えるにしても。増えすぎるなら内部を切り出すかな。
まあ、仕様によってどう作るかはいろいろだけど。
0203デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/16(土) 16:14:59.54ID:3bJEG0FOH
>>201
難しくないのにわからんって馬鹿?
0206デフォルトの名無しさん (ワッチョイ c701-OvAq)
垢版 |
2019/02/16(土) 22:42:47.76ID:0In5hf0F0
モジュールで
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の配列を呼び出したいんですがどこが間違っていますか?
0209デフォルトの名無しさん (ワッチョイ c701-OvAq)
垢版 |
2019/02/16(土) 23:06:17.40ID:0In5hf0F0
>>208
インデックスが有効範囲にありません
0210デフォルトの名無しさん (ワッチョイ a7da-cT+3)
垢版 |
2019/02/16(土) 23:10:54.03ID:CD9VXZwW0
>>209
ああ、よくある、結局原因がよくわからないやつね。
試したら、>>207が正解だったわ。

面白いな。Thisworkbookに書いてあるものを呼ぼうなんて、
考えたこともなかったから、それが原因かと思ったわ。
0213デフォルトの名無しさん (ワッチョイ 5f7c-We++)
垢版 |
2019/02/17(日) 09:02:57.20ID:hMcsTv+Y0
>>212
コードを書かなきゃ間違えないということか、なるほど。
それとも馬鹿は誤解を受けないような文章を書くことをしないってことか?
0214デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 09:28:38.67ID:l7X7saNL0
俺が分かるからいいみたいな考えだとチームで開発はできないよ
0215デフォルトの名無しさん (ワッチョイ 5f7c-We++)
垢版 |
2019/02/17(日) 10:19:09.83ID:hMcsTv+Y0
>>214
それはよく解る。保守性も悪くなるよね。
0220デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 11:45:44.34ID:l7X7saNL0
>>216
>>217
>>218
意味が伝わってないみたいだけど
cells(i, 1) = arr(i-1, 0) がセルに何が書き込まれるかはコードの前後を追わないと分からないよね
これを分かるようにするのが分かりやすいコード
プログラミングが上手か下手かは関係ない話
0221デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 11:51:57.63ID:l7X7saNL0
多次元配列も Dim lngEleName As Long とか専用ループ変数を準備してるならいいけど、ijkで回してるのを見た日にはそいつを殴りにいくね。
0225デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 13:16:45.17ID:Nxpc9YF00
>>223
上司「お前クビ」
0226デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 13:31:38.58ID:Nxpc9YF00
>>224
プロシージャが簡潔ならおk
0229デフォルトの名無しさん (ワッチョイ ff7c-wP4P)
垢版 |
2019/02/17(日) 14:06:36.59ID:7mUUrd8D0
蛇腹erは代数が苦手(キリっ
0230デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 14:20:05.25ID:Nxpc9YF00
>>227
上司「このiってなに?ちゃんと説明して」
0232デフォルトの名無しさん (ワッチョイ bfb7-uWgP)
垢版 |
2019/02/17(日) 14:57:39.75ID:k4RkjrxP0
>>221
Ing Ele ってなんの略ですか
0233デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 15:13:51.30ID:Nxpc9YF00
>>232
しばくぞコラ(LongとElementだよ(にっこり))
0234デフォルトの名無しさん (アークセー Sx7b-a/B5)
垢版 |
2019/02/17(日) 15:32:11.89ID:t0Nzx7bGx
ループカウント用のプロシージャ内ローカル変数でiとかjとか使うのはありだと思う
モジュールレベル以上の参照スコープを持たせた変数をiとかjとかarrとかbufとかで宣言されてたら流石にキレるな
0236デフォルトの名無しさん (ワッチョイ e7b0-3a8x)
垢版 |
2019/02/17(日) 15:43:21.47ID:urjL+jec0
今時ハンガリアン使ってるのクソダサい
0237デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 15:49:41.73ID:Nxpc9YF00
俺はゴールデンの方が好き
猫飼ってるから無理だけど
0238デフォルトの名無しさん (ワッチョイ 87b5-5sVJ)
垢版 |
2019/02/17(日) 16:33:33.48ID:Rm6p2g7t0
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
とかしてもダメでした
0239デフォルトの名無しさん (アウアウウー Sa4b-mBMX)
垢版 |
2019/02/17(日) 16:40:07.44ID:vi4O111wa
共通の処理は共通モジュールかクラスに置いてください
シート1、シート2からはその共通の処理を呼び出してください
イベントハンドラはユーザーコードから呼び出すものではありません
0240デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 16:50:40.07ID:Nxpc9YF00
>>238
Privateが付いてるプロシージャはそのモジュール内でのみ呼び出し可能
sheet1とsheet2は別モジュール
だから怒られてる
0241デフォルトの名無しさん (ワッチョイ 87da-yQ/S)
垢版 |
2019/02/17(日) 16:54:09.55ID:Bys9dR540
化石みたいなレスのあるスレだな
0246デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 18:15:37.59ID:l7X7saNL0
>>243
そもそもボタンってデフォで標準プロシージャに追加されなかったっけ?
標準モジュール作って、Sub ButtonClear_Click() をまるごと移動させたらいけんじゃね?
0247デフォルトの名無しさん (ワッチョイ 5f7c-We++)
垢版 |
2019/02/17(日) 18:27:30.13ID:hMcsTv+Y0
>>244
そんくらい知ってるよ、夏の日の1993だろ。
昭和生まれをナメるなよ。
0248デフォルトの名無しさん (ワッチョイ 87b5-5sVJ)
垢版 |
2019/02/17(日) 18:37:55.36ID:Rm6p2g7t0
調べてたらこんなのが出てきました
http://jscript.zouri.jp/Source/ExcelCtrl.html#LINK7
ちょっとずれてはいますが、ここで

// シートのマクロ関数を呼び出す
ExcelApp.Run( "MacroTest.xls!Sheet1.func1" );
ってのがあるから、標準モジュールだけじゃなくて、シートの関数も他のシートからも呼べるんだよね
マネてやってみたんだけどうまくいかん
0250デフォルトの名無しさん (スプッッ Sdff-isAZ)
垢版 |
2019/02/17(日) 18:53:32.60ID:X48frccGd
???
lngEle?なんかよりi,j,kの方がよっぽど良いだろ。
どんなスコープの場合でも特別な意味の無いループ変数だよ。
世界中で、さらにいうと他言語でも共有されてる価値観だろ。
まあ、ローカル以外で使われることは無いけど。
0251デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 19:03:59.23ID:l7X7saNL0
シートモジュール特有の制約があるのかもしれないけど調べるのめんどい
0252デフォルトの名無しさん (スプッッ Sdff-isAZ)
垢版 |
2019/02/17(日) 19:07:37.68ID:X48frccGd
>>238
根本的に考え方が分かっていない。
まず、色んな所から呼び出したいものは標準モジュールに書く。
そして、そいつを色んな所から利用するように設計する。

君の場合はButtonClear_ClickをSheet1からもSheet2からも使いたいんだからButtonClear_Clickの中身を別関数にして、Sheet1のButtonClear_Clickからその関数を呼び出すようにする。
0254デフォルトの名無しさん (ワッチョイ 87b5-5sVJ)
垢版 |
2019/02/17(日) 19:12:06.36ID:Rm6p2g7t0
>>252
ちょっと違うんだなあ

sheet1にPrivate Sub ButtonClear_Click()
ってかいてるでしょ。 この処理はシート1に対してする処理なのです
それをシート2から、ある特定のタイミングでしたいので、こうなっている

標準モジュールにあるものはもちろん呼べるけど、疑似的にもそうしないといけないのかな
0255デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 19:19:24.91ID:l7X7saNL0
>>254
Worksheets(“シート名”).Range() = 処理
0257デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 19:22:02.36ID:l7X7saNL0
ていうかsheet1にコードを書いたとしてもsheet2がアクティブになってればそっちに書き込まれるからね
0259デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 19:33:19.37ID:l7X7saNL0
>>258
それは入れる物が間違ってる
0260デフォルトの名無しさん (スプッッ Sdff-isAZ)
垢版 |
2019/02/17(日) 19:50:26.47ID:X48frccGd
>>254
違わない。
設計の話をしている。
シート2からも呼び出すんだからシート1に対して行う処理であっても変わらん。

というか、基本的な所で噛み合ってないな。
どんな所に書いてもいきなりブックやシートの省略はしないのが基本だぞ。
Withを使うかオブジェクト変数で受けるのが基本だ。
0264デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 20:26:28.38ID:l7X7saNL0
>>261
Sheet1.Select
0266デフォルトの名無しさん (ワッチョイ 87b5-5sVJ)
垢版 |
2019/02/17(日) 20:39:08.27ID:Rm6p2g7t0
>>264-265
sheet1.Selectをしなくても、セルへの代入だけなら出来た.。 シート2のボタンを押しても、シート1のセルに書き込まれる
でも、Cells(10,10).Selectみたいなセルの選択をするときは、sheet1.selectをしておかないとエラーになる
0267デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 20:43:50.21ID:l7X7saNL0
>>266
書き込みたいシート名を指定する
Worksheets(“シート名”).cells(1,1) =
0270デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 20:47:37.46ID:l7X7saNL0
>>269
そりゃそうでしょ
0271デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 20:53:21.26ID:l7X7saNL0
つーかエラーメッセージ全部貼って見せて
0274デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 21:57:57.43ID:l7X7saNL0
>>273
答えplz
0278デフォルトの名無しさん (アークセー Sx7b-a/B5)
垢版 |
2019/02/17(日) 23:57:36.39ID:t0Nzx7bGx
シート1内外から呼べるPublicな共通関数を作って、クリックイベントハンドラのコードと他モジュールのコードの双方から呼ぶようにすれば良いだけでは
イベントハンドラを直接コードユーザにコールさせようとするのはおかしい
0281デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/18(月) 00:59:55.76ID:hC76sm/R0
>>276
へーシートもオブジェクトなのか
全然意識してなかったわ
勉強になったよありがと
でもお前口悪いから友達いなさそうw
0282デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/18(月) 01:23:07.51ID:hC76sm/R0
シートモジュールに構造体宣言してハマった記憶がある
そういうことだったのか
0283デフォルトの名無しさん (ワッチョイ a761-9BuZ)
垢版 |
2019/02/18(月) 01:23:55.49ID:5t9ctY5m0
頭が悪い 顔が悪い 目が悪い 口が悪い
性格も悪い 手癖も悪い 足腰も最近悪い
酒癖も悪い 女癖も悪い 寝つきも悪い
そんな俺でもその返事の仕方は失礼なんじゃないかな?
とは思うけど。
もしや高度なツンデレさんなのかな?
と、解釈して

次の方 ( ゚д゚)ノどうぞ
0284デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/18(月) 06:33:10.39ID:hC76sm/R0
きっと彼の親はVBAに殺されてしまったんだよ
0287デフォルトの名無しさん (ワッチョイ ff6f-DcjB)
垢版 |
2019/02/18(月) 08:58:38.38ID:AsxIQPE70
前にやってたユーザサポート業務を思い出した
0288デフォルトの名無しさん (スプッッ Sdff-isAZ)
垢版 |
2019/02/18(月) 12:38:44.05ID:UyrImbcld
>>286
バカはお前。
そのセルのセレクトができないと言ってる元の命令がオブジェクトがどういう階層になってるか分かってない典型的な例。

そういう人のコードだから、セレクトなんて必要無いだろうなと先読みしてるんだろう。
何しろセレクトすることなんて極めて殆ど書くことが無い(必要となることが無い)処理だからな。
0291デフォルトの名無しさん (ワッチョイ ff7c-wP4P)
垢版 |
2019/02/18(月) 16:12:57.29ID:JTiYKdtz0
化石観たいな臭いレスでも良いけど
もうちょっと面白いレスが観たいな
VBAネタもう飽きた
0292デフォルトの名無しさん (ワッチョイ a7e3-dCfb)
垢版 |
2019/02/18(月) 16:21:45.06ID:luqjRhnP0
https://japan.cnet.com/article/20087747/

「Microsoftにとって、(Officeのような)ウェブベースのアプリケーションサービス
を提供することは願ってもないことだろう。これにより、エンドユーザーや違法コピー
の問題をもっとしっかりコントロールできるようになる。しかも、大量にメディアを
用意したり、それを流通させるコストも不要になる」
--Garcia on Slashdot
0296デフォルトの名無しさん (アークセー Sx7b-a/B5)
垢版 |
2019/02/18(月) 21:25:29.27ID:Y1NxofRZx
Selectメソッドは記録マクロの記述のためだけに存在する命令と言ってもいいくらいのものだからな
実際に実務でSelectメソッドを書いたことは殆どない
特定のセル範囲(特に複数セル)が選択された状態を作り出すことに実務上の意味があるならば書かざるを得ないんだろうけど
0302デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/18(月) 23:52:49.47ID:hC76sm/R0
SelectよりActivateの方がしっくりくる
0304デフォルトの名無しさん (ワッチョイ 2735-cT+3)
垢版 |
2019/02/19(火) 00:21:46.10ID:XTzrMDQC0
selectは複数できる
acrivateは1つだけ

selectしたcellsはselectionで取得でき、
activateしたセルはActiveCell

また、
ActiveCellはsheetではなくapplicationのメンバ
Application.ActiveCell.Select

↓はできない
sheets(1).activeCell.Select

今色々試しただけだから、間違ってたらゴメン
0307デフォルトの名無しさん (スプッッ Sdff-isAZ)
垢版 |
2019/02/19(火) 12:39:59.48ID:oemf1bOsd
>>306
説明が分かりにくい。

WebBrowserのフォーム
→フォームにWebBrowserコントロールを貼り付けたもの?

文字列変数に入れたHTML
→指定したURL?

フォ―ムにWebBrowserコントロール貼り付けて、指定したURLを表示させたいってこと?
0309デフォルトの名無しさん (ワッチョイ 2735-cT+3)
垢版 |
2019/02/19(火) 13:02:37.15ID:XTzrMDQC0
>>306
input type="text"を変更したいんでしょ
メールアドレスに「123」を入れる例
めっちゃめんどくさいけどガンバレ

Private Sub UserForm_Activate()
WebBrowser1.Navigate ("https://opentype.jp/oteditmoney.htm";)
End Sub

Private Sub UserForm_click()
Set hec = WebBrowser1.Document
Set mailaddress = hec.GetElementsByName("MailAdress2").Item(0)
mailaddress.Value = 123
End Sub
0310デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/19(火) 13:06:28.07ID:DYfM7cdrH
質問じゃないけどcsv取り込みでQueryTable使ったら感動した
ググるとほとんどLine Inputでやってるんだもんなぁ
0311デフォルトの名無しさん (アウアウウー Sa4b-Ayov)
垢版 |
2019/02/19(火) 13:10:41.92ID:mzDqOD0La
ExcelでJavaScriptが使えるみたいだけど、どんなことに使えるのでしょうか?
0312デフォルトの名無しさん (ワッチョイ 2735-cT+3)
垢版 |
2019/02/19(火) 13:21:57.84ID:XTzrMDQC0
>>310
便利なんか?
住所の番地ってどうにかできるんかね
1-1が日付扱いになってしまう

>>311
jsがどうこうではなく、vbaが化石すぎる
jsは慣れれば超楽に書ける。これから覚える人は大分楽できるんじゃないかな
ただ、jsはところどころじゃあくなので気をつける必要がある
具体的にはundefined
0313デフォルトの名無しさん (アウアウウー Sa4b-Ayov)
垢版 |
2019/02/19(火) 13:30:09.72ID:mzDqOD0La
>>312
おぉ!レスありがとう😊
そっかぁvbaは化石か…
今職場で必要だから、業務を通して勉強してるんだよね。
JavaScriptは少し勉強してたけど、会社が受け入れてくれるかな。
0315デフォルトの名無しさん (ワッチョイ 2735-cT+3)
垢版 |
2019/02/19(火) 13:44:22.98ID:XTzrMDQC0
>>313
幾つか忘れていた

jsのメリット
・jsはwebでも標準的な言語
・イラレのスクリプトもjsで動かす事もできる。ほとんど使わないけど
・googleSpreadsheetのマクロはjs

ただ、化石言語にもいいところはある。今までのノウハウがweb上に山程ある
そして仕様変更も20年なかったから、全コードがそのまま使える
(他の言語はバージョン違いでエラーが発生したり、全く動かなかったりする)

結局やることはエクセルのスクリプトなので、vbaでも十分ちゃ十分、
jsのノウハウが積み上がるまでは、vbaの方が楽出来ると思う
0316デフォルトの名無しさん (アウアウウー Sa4b-Ayov)
垢版 |
2019/02/19(火) 13:55:09.79ID:mzDqOD0La
>>315
なるほどなるほど。
詳しく説明してくれてありがとう!
たしかにvbaは歴史があるから、調べてるのは楽だよね。
JavaScriptはしばらく家で勉強した方が良さそうだねw
時期をみて上司に提案してみるよ!
0322デフォルトの名無しさん (ワッチョイ 2735-cT+3)
垢版 |
2019/02/19(火) 15:44:15.07ID:XTzrMDQC0
>>321
かなりめんどくさいことをしている気がする
やりたい事はこれじゃないんじゃないか

Private Sub UserForm_activate()
'多分一回呼ばないとダメ
WebBrowser1.Navigate ("https://example.com";)
End Sub

Private Sub UserForm_Click()
html = "<div>foo</div>"
WebBrowser1.Document.body.InnerHtml = html
End Sub
0323デフォルトの名無しさん (ワッチョイ 8702-5sVJ)
垢版 |
2019/02/19(火) 16:06:51.67ID:XJA9DtkM0
四角の領域を表す構造体にRECTというのがありますが、領域が10個あってしかも定数です
その中にあるポイントがあるかどうかを判断するのに、 PtInRectを使いますが、10個のRECT領域をどうやって
定義するのか考えています
Dim rect1 as RECT, rect2 as RECT ,,,,, rect10 as RECT
とやって、これらに定数を代入するときにいちいち
rect1.Top = 10
rect1.Left =10
---
rect10.Bottom = 1000
rect10.Right = 1970
とかやってたら大変です。 Cとかなら
rect1 = CRect( 10,10,100,100)
って出来ますが、VBAでは出来ませんか。 またやりたいのは、PtInRectなので、簡単に

if PtInRect( CRect( 10,10,100,100), x,y) <> 0 then

みたいにしたいのですが、どうしたら一番スマートに出来るでしょう?
0324デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/19(火) 16:25:56.81ID:DYfM7cdrH
>>323
四角形を描画するメソッドは知ってる?
0325デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/19(火) 16:32:07.86ID:DYfM7cdrH
>>323
ごめん勘違い
GetCursorPos()
0326デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/19(火) 16:34:56.56ID:DYfM7cdrH
>>323
またまた勘違い
座標の指定はむりじゃね
それぞれの四角形の位置関係に規則性はないんでしょ
0327デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/19(火) 16:46:08.58ID:DYfM7cdrH
Topとか名前を付けないで配列の要素番号に対応づけるとか
0328デフォルトの名無しさん (ブーイモ MMcf-blJ9)
垢版 |
2019/02/19(火) 19:15:58.92ID:C6whiypoM
>>322
それです!ドストライクです!!
エスパーさん手間を掛けて本当にすみませんでした。
二日考えてダメだったんですけど一回何か表示させる必要があったんですね。

あと次回は自力で出来るように頑張ります〜!!
ありがとうございました!
0329デフォルトの名無しさん (ワッチョイ 071f-BmB6)
垢版 |
2019/02/19(火) 19:40:34.45ID:VgLhyIar0
カンマ区切りのCSVファイルを2次元配列に入れたい。

Dim arr()
arr=getCSVData(strFile)


private Function getCSVData(byval ...)as string()
Dim tarArr()
 //処理
getCSVData=tarArr
end Function
こんな感じで配列にして1次元が行、2次元が列に格納したいんですが
ReDim、ReDim Preserveのタイミング等々が分かりません。

先に一度開いて行数と列数の最大を取得してからReDimでtarArrを2次元配列にし、もう一度開いて一行ずつ読み取ってカンマ区切りをsplitして配列に入れてからUBound分ループしてtarArrに入れる方法ですかね?
0330デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/19(火) 20:09:29.49ID:3o3WGLUD0
>>329
多次元配列は最後の要素しか拡張できないから、左の要素はUbound(Split(1行目,”,”))で最初に確定させるしかない
右の要素はredim preserveで拡張できるから普通にループで増やしていけば良い
0331デフォルトの名無しさん (アークセー Sx7b-a/B5)
垢版 |
2019/02/19(火) 20:17:18.51ID:f2qQz3/xx
>>323
クラスにしたらいいんじゃないの
vbaで引数付きコンストラクタの実現は難しいけど、
四つの座標情報を引数に取るプロパティ関数を用意して、Rect構造体のプロパティを持たせるようにすればそれらしいことができるのでは
0333デフォルトの名無しさん (ワッチョイ 5f2f-dPPD)
垢版 |
2019/02/19(火) 21:21:04.93ID:eXSGnhOj0
>>323
構造体でできなくはない
VBAの構造体、制限多いけどな

Public Type Rect
Top As Integer: Left As Integer: Bottom As Integer: Right As Integer
End Type
Public Function CRect(Top As Integer, Left As Integer, Bottom As Integer, Right As Integer) As Rect
Dim r As Rect
r.Top = Top: r.Left = Left: r.Bottom = Bottom: r.Right = Right
CRect = r
End Function
Public Function PtInRect(Rect As Rect, x As Integer, y As Integer) As Boolean
If Rect.Left < x And Rect.Right > x And Rect.Top < y And Rect.Bottom > y Then
PtInRect = True
End If
End Function
Public Sub test()
Dim r(10) As Rect
r(1) = CRect(10, 10, 100, 100) '...
If PtInRect(r(1), 15, 180) Then
MsgBox "In Rect1"
End If
If PtInRect(CRect(10, 10, 100, 100), 15, 80) Then
MsgBox "In Rect2"
End If
End Sub
改行多すぎらしいので:で詰めて書いてる
0335デフォルトの名無しさん (ワッチョイ 5f4f-nFDO)
垢版 |
2019/02/19(火) 21:47:03.10ID:LH3y88CS0
>>319
え?
そうなの?
それは知らなかった。

ちなみに最新はASP.netのcore2.1だと思うんだけど
VisualStudioでASP.Net Coreプロジェクトを作る際、
.Net Coreと.Net Freamworkのどちらのプラットフォームを選択するか聞いてくるけどあれは何なの?
0337デフォルトの名無しさん (ワッチョイ 877d-yQ/S)
垢版 |
2019/02/19(火) 22:33:29.04ID:LjPGQpms0
Dimってどこに書いてますか?
全部最初に書きますか?

For i= 0 to 100
for j = 0 to 100
iとjを使った処理
next
next
この時、Dim j as Integer ってどこに書きますか?
「For i= 0 to 100」の上か下かという質問です。
0339デフォルトの名無しさん (ワッチョイ 071f-BmB6)
垢版 |
2019/02/19(火) 22:45:04.21ID:VgLhyIar0
>>330
自分でも調べてたけど、「最後の要素しか増やせない」って同じこと書いてありました。これは
例えば、行数読んだ結果がLcnt=10だとして
まず

ReDim(Lcnt,0)で作り
配列(0 to 10,0)ができ
Redim Preserve(Lcnt,Ubound(Split(1行目))
区切った値が5なら
配列(0 to 10,0to5)が出来てしまい、いっぺんに右の要素数が変更されるってことで合ってます?
と言うことは、1行目が5列で次に読んだ2行目が3列なら右の要素数は3に減るって事ですかね?
ifか何かで要素数は増える時だけRedim Preserveのが良いですかね?
0340デフォルトの名無しさん (スプッッ Sdff-BmB6)
垢版 |
2019/02/19(火) 22:50:47.62ID:VJWnLClRd
>>337
VBは上にまとめ
C#は使う時
他の言語はしらん。あくまでイメージ。

スコープは短くが理想だから長くなって下部に変数が初登場ならFunctionとかCallで余分そうなものは排除。

だからそのループも逃がす
0341デフォルトの名無しさん (ワッチョイ bf8c-O/Qv)
垢版 |
2019/02/20(水) 00:08:08.78ID:Hgznwu9O0
>>339
あなたの用途に合ってるのは2次元配列じゃなくて配列の配列。
ReDim arr(0 To n)
arr(i) = 別の配列  ` i : 0〜n
みたいなことができる

「別の配列」のところに、csvの一行分を処理して配列を返す関数を当てはめればいい。
もちろんクラス化してもいいけどさ
0343デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/20(水) 07:38:24.67ID:5mnmpgTAH
クラスって要素名を予め宣言しないといけないからcsvの要素が変わると対応できない?
教えてエロい人
0345デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 11:17:04.40ID:Aqbfj0bAp
教えてください。
エクセルのマクロです
PDFファイル(100ページくらいある)を、エクセルに、全ページをたて一列に貼り付けたいのですが、
どう書けばいいでしょうか
0347デフォルトの名無しさん (ワッチョイ e7ce-1ffV)
垢版 |
2019/02/20(水) 12:07:33.49ID:crzgHpZv0
なぜPDFを貼り付けるのか
そのまま印刷すればええやん

そのPDFは1つのファイルの中に100ページあるの?
1ページだけのPDFファイルが100個あるの?

バラバラのPDFファイルを1つに結合したいだけならフリーウェアでできるよ
0348デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 12:28:15.94ID:Aqbfj0bAp
>>347
印刷のためじゃなく、PDFをシートにはり、横にエクセルでコメント入れたい。
0349デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/20(水) 12:36:44.12ID:5mnmpgTAH
コメントならPDFファイルでも入れられるよ
0350デフォルトの名無しさん (ワッチョイ 2735-cT+3)
垢版 |
2019/02/20(水) 12:37:09.49ID:HgkG/6H60
>>345
PDFを画像に分割→エクセルに貼り付け
って流れになる
PDFから直接どうこうは止めたほうが良い、PDFを触るのはかなりめんどくさい

PDFを画像に分割するソフトがあると思うから、まずはそれを探して試してみて
どういう形式で画像が出て来るかが分かれば、後はvba簡単に書けると思う

>>349
そういやそっちの方が早いね
0351デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 12:38:58.44ID:Aqbfj0bAp
>>349
大量のコメントや式です
0352デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 12:39:49.65ID:Aqbfj0bAp
>>349
大量のコメントや式です
0354デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 12:53:11.56ID:Aqbfj0bAp
分割するとは?
100ページのドキュメントだから100個のファイルを作成するということでしょうか。
0356デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 13:15:01.09ID:Aqbfj0bAp
分割しないで、ページを読み込み、貼り付けはできないのでしょうか?
0357デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/20(水) 13:17:35.13ID:5mnmpgTAH
100in1で出力すればいけんじゃない?
0359デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/20(水) 13:27:47.31ID:5mnmpgTAH
PDFを画像にするっていうのはプリンタで印刷するのと同じイメージだから基本1ページ1ファイルね
0361デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/20(水) 13:51:25.06ID:5mnmpgTAH
pdfをtxtにできるサイトがあるね
0363デフォルトの名無しさん (ワッチョイ e7ce-1ffV)
垢版 |
2019/02/20(水) 14:49:29.70ID:crzgHpZv0
どうしてもVBAとExcel上でやりたかったら
100ページのPDFを100枚の画像に変換するのはフリーウェアで一発でできる
画像をワークシートに並べるだけならVBAで簡単に書ける

上司の命令とかで他の選択肢がないなら、俺ならこうする
0366デフォルトの名無しさん (ワッチョイ 4794-7Bqt)
垢版 |
2019/02/20(水) 17:59:23.96ID:lkHSh4f40
「○○したいんですけど教えて下さい」
「なんでそんなことしたいの?バカなの?」

何でこんな回答いちいちすんだろ
答えてくてウズウズしてる自称プロが自分のわからない質問来てカリカリしちゃってるのか?
0368デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/20(水) 19:09:49.05ID:W87kh7t10
できない。

以上。
0371デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 19:30:07.27ID:Aqbfj0bAp
1ページ目が貼り付けられるけど、ページを指定できないのかな
0378デフォルトの名無しさん (ワッチョイ 7d01-Y1hu)
垢版 |
2019/02/21(木) 05:02:12.65ID:fo0B5AuF0
>>376
組織はそれが普通。趣味で仕事やりますというわけには行かない
0380デフォルトの名無しさん (ワッチョイ 6a98-Y1hu)
垢版 |
2019/02/21(木) 08:00:03.08ID:WrVB68JS0
趣味で作り上げたとしても説明してレビュー受けないといけない。その労力って結構きついしいっそ言われたまま作り上げた方が精神的にラクね
0382デフォルトの名無しさん (JP 0H2e-AaBj)
垢版 |
2019/02/21(木) 08:24:52.09ID:hsBre2j/H
マニュアル化できるレベルの仕事しかできないって自虐だろ
0383デフォルトの名無しさん (スップ Sd0a-er5G)
垢版 |
2019/02/21(木) 12:40:21.42ID:tE5CGhgad
1.質問に回答する。
2.質問者から、「その場合だと〜が上手くいきません。」と返事。
3.その場合は〜すれば良いと回答する。
4.質問者から「それだと〜」...
5.2-4を何度か繰り返す。
6.質問者に「そもそも君はその処理で何をやりたいんだ?」と聞く。
7.質問者の返事を聞いて、結局質問者の設計が糞だったと知る。
8.1-7をを何度となく経験してると、質問を見た時に設計の糞さ加減がかなりの確度で予想できるようになる。
9.質問者の聞いてることだけ回答すると糞設計のせいでドツボに嵌まるので聞いてることだけ回答するのは辞めようという結論になる。
10.質問者は自分の糞設計に気付かないので、質問にだけ回答すれば良いのにと思う。
0384デフォルトの名無しさん (ワッチョイ c594-uPuZ)
垢版 |
2019/02/21(木) 16:01:26.14ID:EV12A9vO0
こうやって質問者をひとくくりで決めつけちゃうような視野が狭い人が一番の癌なんだよな

バカほどなんでも決めつけて単純化させようとする
勝手に単純化させた結論を赤の他人にいきなり押しつけるから当然理解されない
理解されないことを相手がバカだからと決めつけていきなり罵り出す
頭がおかしい人なのかな?と放置されると論破して黙らせたと思い込んで悦に浸り出す
そしてプロ回答者としての自信を増して増長して居座る
0385デフォルトの名無しさん (ドコグロ MMb1-bAbS)
垢版 |
2019/02/21(木) 16:10:32.99ID:7HScUEGsM
大抵の事務仕事は本来単純なことをわざわざ難しくして仕事を作っているだけなのは事実だね
VBAや最近だとRPAのような小手先の自動化ツールのは、本質的なプロセスの見直しに対するモチベーションを削いでいる面もある
0388デフォルトの名無しさん (ドコグロ MMb1-bAbS)
垢版 |
2019/02/21(木) 18:47:24.87ID:7HScUEGsM
>>387
同意するわ
明らかに知識の乏しい初心者が妙に具体的に手段を特定して助けを求めてきた場合、
「そんなことはどうでもいいから目的を教えろ」と対応するのが最も確実で効果的で手っ取り早い
0391デフォルトの名無しさん (ワッチョイ 6d1f-Ty0B)
垢版 |
2019/02/21(木) 19:18:39.73ID:AiPG59Hd0
プログラムって書き方って人それぞれ違うと思うけどみんな書き方どんな?

EXCELのセルデータをComboBoxに格納

メイン文

caii addcbo(FilePath,1,Me.cbo1)
caii addcbo(FilePath,5,Me.cbo2)
caii addcbo(FilePath,8,Me.cbo3)

Function addcbo(....)
※DAOでEXCEL開く
第2引数の列を下にループ
第3引数に空になるまで格納

End Function

てな感じのコードってどうなの?
俺は先に2次元配列でシート丸ごと持ってきてから入れてく感じにしたんだけど、ここにいる人達はどう書く?
0392デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/21(木) 19:30:43.16ID:UHF1Q6o+0
データ取得は別プロシージャにして配列につっこむ
0394デフォルトの名無しさん (ワッチョイ 89c5-T+SP)
垢版 |
2019/02/21(木) 19:53:49.02ID:dFUlMofS0
>>391
おまえプロさんか?
まだプロさん予備軍やったら気いつけや
そこからプロさんに堕ちるんはあっちゅう間やで
0395デフォルトの名無しさん (ワッチョイ c594-uPuZ)
垢版 |
2019/02/21(木) 19:57:47.93ID:EV12A9vO0
>>387
さすがプロ回答者の鏡
嫌なら別に回答者なんてやらなくてもいいんだよ?
質問者をひとくくりに見下すようなひねくれ者になってまでプロ回答者をやり続けてる目的ってなに?
こんなとこで他人を見下してなきゃ自尊心保てないとかそんな感じ?
0397デフォルトの名無しさん (ワッチョイ 6a2f-oRCO)
垢版 |
2019/02/21(木) 20:03:08.56ID:mRRRBv2X0
>>384
こうやって回答者をひとくくりで決めつけちゃうような視野が狭い人が一番の癌なんだよな


バカほどなんでも決めつけて単純化させようとする
勝手に単純化させた結論を赤の他人にいきなり押しつけるから当然理解されない
理解されないことを相手がバカだからと決めつけていきなり罵り出す
頭がおかしい人なのかな?と放置されると論破して黙らせたと思い込んで悦に浸り出す
0399デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/21(木) 20:14:11.51ID:UHF1Q6o+0
質問者は基本的に馬鹿
「インターネットは開くんですけどxxシステムが開きません」と言われてTraceやらブラウザ設定やらやった挙句、LANケーブルが挿さってないだけでインターネットはキャッシュでした、っていうようなオチが山ほどある
奴らの言葉を鵜呑みにしてはいけない
0402デフォルトの名無しさん (ワッチョイ 89c5-T+SP)
垢版 |
2019/02/21(木) 20:49:56.47ID:dFUlMofS0
>>399←こいつホンマもんのプロさんやんwww
Traceてwwwwwwww
0403デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/22(金) 00:25:53.24ID:9R98EKTp0
>>402
0404デフォルトの名無しさん (ワッチョイ 6a7c-RjxB)
垢版 |
2019/02/22(金) 00:44:27.12ID:EpE2F9dV0
混沌とした質問ではなくてある程度整形された質問ならお互いに健全かもしれないね。
「例えば質問のためのテンプレ埋めてもらう」とかだけでもやり取りの回数減るんじゃないかな。
テンプレの内容はよくわからないけど、例えば「配列が解るか、オブジェクトが解るか、APIが解るか」とか書いてもらえれば質問者のレベルか解りやすいから罵ることもないだろうし
全体の流れの一部として困ってるのか、単純に言語仕様で困ってるのかだけでも質問者に必要なのがコンサルなのか解答なのか切り分けしやすいと思う。
0405デフォルトの名無しさん (アウアウエー Sa52-bAbS)
垢版 |
2019/02/22(金) 00:57:28.09ID:nGlWTBX9a
【目的】
【何がわからないのか】
【どうなることを期待しているのか】
【何故それが必要だと考えたのか】
でいいよ
質問者のレベルなんてレスの内容見りゃわかるだろ
0406デフォルトの名無しさん (ワッチョイ 5e68-rusg)
垢版 |
2019/02/22(金) 01:31:51.52ID:1cZDvNG50
>>405
>【目的】
>【何故それが必要だと考えたのか】
これは無くてもいいかも
多分あんまり良い情報は返ってこない気がする

>【何がわからないのか】
これも無くて良いかもしれないけど、
まぁ一応質問スレなので

後は最初の状態が欲しい
初めと終わりがあれば何とでもなる
それと反復頻度。一回だけなら一回だけ用の雑コードで済ますし、毎日ならもうちょい丁寧に書く
ってわけで以下になっていると楽

【作業前の状態】
【終了時の状態】
【何がわからないのか】
【作業の頻度(一回だけ or 何度も)】
0408デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/22(金) 09:18:19.59ID:OJD9m6ZlH
あんまり敷居を高くすると質問者が減るよ
0410デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/22(金) 09:46:06.70ID:OJD9m6ZlH
>>409
そう考えてるのはお前だけだよ
0411デフォルトの名無しさん (ワッチョイ 6a90-rusg)
垢版 |
2019/02/22(金) 09:53:52.37ID:HFM6F1Kc0
まぁプロ回答者どもが罵り合いやってますが、質問者の方はそんなの気にせず
どんどん質問してくださいな w
0413デフォルトの名無しさん (ワッチョイ c594-uPuZ)
垢版 |
2019/02/22(金) 16:26:24.07ID:brEIpzdG0
このスレの本質はプロ回答者選手権だからな
プロ回答者の敵はプロ回答者
質問者など餌に過ぎない
その餌を誰が一番上から踏み潰すかを競い合う

ちなみにプロ回答者にもなると質問に答えたりしない
0416デフォルトの名無しさん (アウアウウー Sa21-/vCN)
垢版 |
2019/02/22(金) 20:37:47.33ID:O594Y42ea
まぁ別に目的の記述は無くてもいいけど
何を目的にしているかの記述があれば
代替案考えてくれる人もいるだろうし
欲しい解答が得られやすい場合もあるわな

逆に余計なこと言って欲しくないのなら
書かないのも有りだと思うけど
解答者がゲスパーして答えるのも
また有りだと思うし
0418デフォルトの名無しさん (ワッチョイ 39da-dS/9)
垢版 |
2019/02/22(金) 21:01:06.12ID:Pvmgb/R80
ここの質問を見ると、よほど変なもん作らされてるんだろうなって思う。
何に使うのかわからないようなのが多くて、
実務で使いそうなのがあまり出てこない。
0425デフォルトの名無しさん (ワッチョイ 8aa3-5+1H)
垢版 |
2019/02/23(土) 01:23:52.97ID:CTQXI+x50
エラーがわかりにくいのがいちばんのストレス
そのほかにも可変長引数とかジェネリクスとかwithの糞文法とか短絡評価未搭載とかインターフェイスが歪んだ設計になるとか色々遅れすぎ
所詮底辺が一発ツールで使う言語
0429デフォルトの名無しさん (ワッチョイ 3968-rusg)
垢版 |
2019/02/23(土) 09:04:33.17ID:Cm202fZQ0
>>425
エラーチェックは本当にな
これでforが無いって言われる。本当にないのはもちろnendif
さすがにもう迷う事は無いけど、
初心者の頃は散々苦しめられた

Sub foo()
For i = 1 To 10
If True Then
Next
End Sub
0433デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/23(土) 10:29:43.91ID:AFk0uxx90
短絡評価ってなんですか?
0434デフォルトの名無しさん (アウアウエー Sa52-bAbS)
垢版 |
2019/02/23(土) 10:35:04.36ID:sW0ZRaO0a
>>433
お前がGoogleの採用選考を受けても学歴で足切りされて職務経歴の中身すら見てもらえないだろ?
結果が決まってるのに余計な評価をするのはリソースの無駄だからだ
そのように、評価が確定した時点で残りの評価を省いて結果を出す戦略を短絡評価という
0436デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/23(土) 11:44:31.84ID:AFk0uxx90
>>434
お前バカだな
Googleは学歴より経歴重視だよ
0437デフォルトの名無しさん (ドコグロ MM12-bAbS)
垢版 |
2019/02/23(土) 12:14:20.39ID:yEreZVJRM
>>436
低学歴にも凄い経歴の奴はいるが、高学歴の中にはもっと沢山いるんやで
採用のための人的リソース最適化問題に対する戦略として、学歴フィルタが有効であることは十分に証明されている
0438デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/23(土) 13:07:59.71ID:AFk0uxx90
>>437
履歴書と職務経歴書って同封して送られてくるんだから同時に見ればいいじゃん
それとも30秒くらいの時間を惜しんで職務経歴書読まずにお祈りするの?
大した戦略だねw
0441デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/23(土) 18:43:00.90ID:AFk0uxx90
Googleはそもそも学位が必要ない時点でお前らズレてんだよ
0447デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/24(日) 04:42:51.56ID:ZjoVn9Sx0
goto使うと負けた気分になるけどネスト深くなるくらいなら使う
0449デフォルトの名無しさん (ワッチョイ f1ce-ZT00)
垢版 |
2019/02/24(日) 11:16:37.13ID:x1+EfWpB0
昔から言われてるけどGoToとかExitみたいな無条件ジャンプはできるだけ使うべきじゃない
ループから抜ける条件が複数ある時は、条件判定部分を関数にして外に出せばたいがい解決する
0453デフォルトの名無しさん (ワッチョイ 5d04-viXF)
垢版 |
2019/02/24(日) 11:34:47.34ID:UtSvB3y70
Forの3重構造の場合、例えば、i, j, kで回したとき、一番中の処理で、
i=10000
j=10000
k=10000
とか設定したら、全部抜けるという技は使ったことはあるが、Next k の次に処理があってNext jとかってなってるときは
やはりgoto を使うので、結局こういう技は使わなくなった
0454デフォルトの名無しさん (ワッチョイ 3968-rusg)
垢版 |
2019/02/24(日) 12:03:06.64ID:laz54YR/0
for、特に二重ループから抜ける時はgotoで良い
if flg then exit for
こんなもん何個もあったら余計見づらいし間違う

>>449
気持ちはわかるけど、どうしても>>450になって余計に見づらい

>>45
20年前の言語で全く進化してないからな
python2.x→3.xの悪夢を見た者としてはこれはこれで良い
0458デフォルトの名無しさん (ワッチョイ 3968-rusg)
垢版 |
2019/02/24(日) 16:01:32.16ID:laz54YR/0
>>456
>それに苦しめられたのはお前が悪い。
どう見てもvbaのエラーチェックがしょぼすぎる
少なくとも>>429みたいなエラーチェックはあり得ない。あっても修正される

>>457
殆ど無いが、エクセルはそもそもがセルが行列の二次元+シートの三次元
開いてるブックを含めれば四次元だけど、さすがにこれは無い
全シートもあんまりないけどな

全セル(usedrange)に処理をかけて特定条件で抜けるというのは何度かあるな
ただまぁ別に抜けんでもそんあに変わらないというのもあるけど
0459デフォルトの名無しさん (ワッチョイ c594-uPuZ)
垢版 |
2019/02/24(日) 16:43:43.47ID:EsuDtWv80
エラーがわかりにくいという話に
エラーを出すおまえが悪いとマウント取りに行くプロ回答者

マウントがとりたくてやってるのか本当にただのバカなのかどっちなんだろ
0462731 (ワッチョイ 11e6-Vd0N)
垢版 |
2019/02/24(日) 17:45:18.70ID:DRTFUInr0
いや、doとfor組み合わせれば二重ループ、三重ループからも抜けれるよ。
実用性は置いといて。
0464デフォルトの名無しさん (ワッチョイ b501-W5xD)
垢版 |
2019/02/24(日) 18:03:52.89ID:vPp3qwU80
>>459
ただのバカだと思うよ。
あの場合は明らかにエラーメッセージがおかしい。

でも、エラーチェックしてると2つ以上の原因(またはどちらかが間違い)が考えられる場合がよくある。
その時どうメッセージ出すかは、作る人(仕様)次第。

ちなみに、
If xxx Then Exit For
If xxx Then _
Exit For
If xxx Then
Exit For
End If
それぞれ意見はあるだろうが、無駄に行増やしたくないが、マルチステートメントもな… なので、自作では2番目をよく使う。(もちろん仕様で決まってるならそれ優先。賛否について議論はしない)
0467デフォルトの名無しさん (スップ Sd0a-er5G)
垢版 |
2019/02/24(日) 22:11:47.76ID:Jr9LmcmNd
>>464
最後の奴を使う。
インデントで明らか。
というか、そんなエラーを出すこと自体無い。

が、もちろんスタイルの問題だから一番最初の奴を使おうが2番目のを使おうが問題無い。
エラー出してもすぐに分かるならな。

ちなみにその最後の奴ならIfとEndIfを書いてからExit Forを書く。For Nextの場合も中身は後だ。
染み付いてるんでね。
別にそういう書き方をすべきと言ってるんじゃない。
エラーにすぐ気付くなら何も問題は無い。
0472731 (ワッチョイ 11e6-Vd0N)
垢版 |
2019/02/25(月) 12:13:02.41ID:lRskRR3f0
>>469
ようするにVBの部分の話か?
変数の大ニュースとかループとか、配列のメモリ確保とか
0473デフォルトの名無しさん (スップ Sd0a-er5G)
垢版 |
2019/02/25(月) 12:31:17.59ID:iOBpdHSUd
確かに遅いんだけど、遅いと言ってる奴の大半はそいつのコードに問題があるような気がする。
コード変えたら100倍速くなったとかざらだし、VBAが遅いせいでと感じることは殆ど無い。
遅い場合でも処理を考えたら仕方ないと思える場合が殆ど。
0474デフォルトの名無しさん (スップ Sd0a-er5G)
垢版 |
2019/02/25(月) 12:42:50.70ID:iOBpdHSUd
>>471
純粋な数値計算部分が遅いと思うよ。
だからAPI使ってマルチスレッドのコード書いても処理が追い付かなくなる危険性があるわけで。
ただ、そんなの遅いと感じるようなものじゃないし、遅さが気になったら自分のコ―ドを疑った方が良い。
0476デフォルトの名無しさん (ワッチョイ 0aa2-uGSY)
垢版 |
2019/02/25(月) 17:45:36.59ID:+5CiRMIi0
javascriptとvbaをネストする方法ってありませんか?
Dim ie As InternetExplorer
Set ie = CreateObject("InternetExplorer.Application")
ie.navigate ("https://kakaku.com/specsearch/0010/";)
中略
ie.navigate "javascript:var i; for(i=1;i<18;i++){page(i);}"
これで1から18までpage関数をまわすことができると思いますが
1ページごとに情報を抜き出すための処理をvbaで書きたいです。
対象のwebページはjapvascriptのpage関数を使ってしかページ移動ができません。
ちなみに対象ページは↓です
https://kakaku.com/specsearch/0010/
0480デフォルトの名無しさん (ワッチョイ 0aa2-uGSY)
垢版 |
2019/02/25(月) 19:47:45.89ID:+5CiRMIi0
>>477
こんな方法があったんですね!
ありがとうございます
getの形で見ることができるんですね
これならfor文でまわせそうです

>>478
javascriptの知識がvbaの知識より薄くてできません・・・

>>479
その方法もありですね
勉強になります
ありがとうございます
0482デフォルトの名無しさん (ワッチョイ 0aa2-uGSY)
垢版 |
2019/02/25(月) 20:05:06.80ID:+5CiRMIi0
>>481
これでもいけますね!
ありがとうございます
自分でも試してたつもりだったんですが&の端がシングルクオーテーションだったからだめだったんだと思います。
これでもネストできそうです。ありがとうございます。
0483デフォルトの名無しさん (ワッチョイ 6a7c-RjxB)
垢版 |
2019/02/25(月) 22:06:28.97ID:U7AKD+aj0
フォームに張り付けたMediaPlayerプレイヤーのコントロールのプロパティが勝手に変わる謎のエラーが頻発。
どうもフォームのサイズを変更するAPIがイタズラしているらしい。
こまかく切っていってようやくまさかの原因が解ったが対処方法わからずに対処療法してしまったがそれでも半日あまりを費やした。
よくわからないサンプルコード使うと謎のエラーが出てハマることを覚えた。
プログラマーってすごいな、これ毎日やってたらほんと禿げるわ。
0484デフォルトの名無しさん (ワッチョイ 3968-rusg)
垢版 |
2019/02/25(月) 22:14:43.73ID:RXoXH9qp0
>>483
>よくわからないサンプルコード使うと謎のエラーが出てハマることを覚えた。
これやると一番時間を無駄にする
・サンプルコードをざっと眺めて全体の流れを把握
・APIの仕様をしっかり読む
・一からテストコードを書く
・APIもう一回読み直しながら、もう少し詳細に作り直し
・本番環境で書く

こんな感じ。仕様を把握してから書いたほうが絶対に早い
0485デフォルトの名無しさん (ワッチョイ 8aa3-5+1H)
垢版 |
2019/02/25(月) 22:46:07.98ID:TP8zPbuZ0
>>448
オーバーロードってあったっけ?それに、ジェネリクスがないから全部の定義されてる型について生成しなきゃいけないから地獄なんだよ!リテラルで配列を生成できたらいちいちDimしなくてもいい
0488デフォルトの名無しさん (ワッチョイ 7d83-viXF)
垢版 |
2019/02/26(火) 06:28:56.69ID:QryMFy3y0
>>429
これ。面白いな。試していないが、頭から見て行ってまずForが出て来るのにForがないって言われるの?w

VBAも構文を修正するのはいろいろと問題があるだろうけど、こういうペリフェラルな部分では改良できるところは
いくらでも残ってるよねえ
0489デフォルトの名無しさん (ワッチョイ 7d83-viXF)
垢版 |
2019/02/26(火) 06:39:06.54ID:QryMFy3y0
構文チェックくらいなら、どっかサードパーティが作ってアドオンとか出来ないのかな
xlsファイルの中からプログラム文ってテキスト抽出って出来ないんだっけ
0490デフォルトの名無しさん (ドコグロ MM15-ZgJD)
垢版 |
2019/02/26(火) 06:56:12.34ID:Dl2cSn2NM
>>488
If〜Thenでブロック作るからNext出て来たらForがないと見なされる
C言語とかはEnd IfとNextの両方が } なので発生しないけどイメージとしては
for(i = 0; i <= 10; i++)
 if(true){
next
 }
みたいな感じになってる
0491デフォルトの名無しさん (ドコグロ MM15-ZgJD)
垢版 |
2019/02/26(火) 07:22:50.54ID:Dl2cSn2NM
>>489
やれるやれないという意味ならやれる
そもそも*.basとか*.clsとかにエクスポートしたらテキストファイルだし
セキュリティの設定はいるけどCOM経由ならそんなに難しくない
ただ>>429みたいなケースでわかりやすいメッセージを出すのは思ったより難しい
0493デフォルトの名無しさん (ワッチョイ 662c-pE6h)
垢版 |
2019/02/26(火) 12:32:40.78ID:5MxkS3P70
>>476-482
wget は簡易クローラーだから、これで複数ページをダウンロードすれば?
その後、vba で処理すれば?

まあ、適度に時間をおきながら、アクセスしなよ。
頻繁にアクセスすると、営業妨害で逮捕されるかも
0502デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/27(水) 09:24:25.27ID:94mgNWr4H
数値を“”で括って連結させるって普通はやらないよな
もはやクレーマーの域
0505デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/27(水) 10:14:24.05ID:94mgNWr4H
>>504
自己紹介かな?
0507デフォルトの名無しさん (アウアウクー MM7d-0RHA)
垢版 |
2019/02/27(水) 10:48:04.11ID:hD6s3+cfM
&演算子が勝手に文字列に変換するのは利便性考えたらわかるし
Long型の変数に文字列代入する時に暗黙のキャストするのもわからなくはない

けど警告ぐらいは出してほしいね
0508デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/27(水) 10:48:12.18ID:94mgNWr4H
>>506
それはエラーであってほしいというお前の願望だろ
0512デフォルトの名無しさん (スップ Sd0a-er5G)
垢版 |
2019/02/27(水) 12:41:38.23ID:JcvtiT+vd
どんな言語でもツボは有るわけでね。
押さえてコードを書けない奴がアホなだけだろ。

初めて触った初心者じゃあるまいし警告なんて全く必要無い。
0514デフォルトの名無しさん (ワイモマー MM0a-uGSY)
垢版 |
2019/02/27(水) 13:08:23.01ID:OA+HeXxoM
同じマクロを使っている複数の文書があって、マクロの一部を修正したいんですが、
別ファイルのモジュール内の変更を行うマクロは VBA を使って書けますか?

または、別ファイルのモジュールを削除(開放)してインポートする形でも構いません。

実際はワードでやりたいことですがワードVBAスレがなさそうなのでこちらで質問しました。
Normal を書き換えて対応するというのはできない前提です。
0517デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/27(水) 13:19:50.19ID:94mgNWr4H
>>514
書けるよ
0519デフォルトの名無しさん (ワッチョイ 7d88-viXF)
垢版 |
2019/02/27(水) 15:47:12.82ID:WN1Wln/+0
>>510
お前は何を言ってるんだ?
& は文字の連結子だろ。 だから、文字としての1と0を連結したんだよ
>>513
代入先は数値だな。 文字処理をしてそれがVariantだからそれから数値変換したんだな
文字処理が優先なんだろ
0522デフォルトの名無しさん (ドコグロ MM12-ZgJD)
垢版 |
2019/02/27(水) 17:58:08.46ID:HrTieKXOM
>>507
& 演算子は文字列同士の連結だから
2 & 1 ⇒ "21"
"2" & 1 ⇒ "21"
2 & "1" ⇒ "21"
"2" & "1" ⇒ "21"
になる
逆に - 演算子は数値同士の引き算だから
2 - 1 ⇒ 1
"2" - 1 ⇒ 1
2 - "1" ⇒ 1
"2" & "1" ⇒ 1
になる
問題は + 演算子で普通は数値の足し算なんだけど両辺が文字列の時は文字列連結になるので
2 + 1 ⇒ 3
"2" + 1 ⇒ 3
2 + "1" ⇒ 3
"2" + "1" ⇒ "21"
になる
なのでVariant使っててA + Bとかやってると両方が文字列の時にはあ?ってなことになったりする
0530デフォルトの名無しさん (ワッチョイ ea01-ZgJD)
垢版 |
2019/02/27(水) 19:31:13.45ID:zqU1UpTE0
>>527
> だから、型を意識してコード書かない奴は駄目なんだ。
そんなのわかってるからいちいちマウント取りに来なくていいよ
世の中には変数宣言すらしないやつとかもいるし使い捨てコードとかもある
0535デフォルトの名無しさん (ワッチョイ 89c5-T+SP)
垢版 |
2019/02/27(水) 20:17:03.40ID:INBREE+00
クソレスすんなプロさん
0537デフォルトの名無しさん (ワッチョイ 7d88-viXF)
垢版 |
2019/02/27(水) 21:48:46.20ID:WN1Wln/+0
まあやっぱり、1 & "0" とか  "2" + 1
とかが出てきたら、エラーで落とすのが普通だろうなあ
で、プログラマはそこで、Val関数で数値にするとか逆に文字列にするとか
やっぱり型変換、確認をプログラムの中に入れながら作るのが本来の筋だと思うわ
そもそもの構文を変えないのであればね
0540デフォルトの名無しさん (ワッチョイ 1feb-IBRN)
垢版 |
2019/02/28(木) 00:41:55.86ID:ULaFt4eB0
質問です。お願いします。

public sub shuukei()
'集計してシートに書き出してそそのシートのコピーを別ファイルとして保存
end sub

こういうコードを作りましたが、少しでも速く処理されるようにもっと工夫したいと思っています。
そこで、少し書き直しては速度に変化があるか確認したいのですが、コードの実行速度を
測る方法がわかりません。教えていただけないでしょうか?

public sub jikantest()
  '計測スタート
  call shuukei
  '計測終り
  msgbox かかった時間
end sub


こんな感じでいちいち確認したいです。
0546デフォルトの名無しさん (ワッチョイ 1feb-IBRN)
垢版 |
2019/02/28(木) 06:51:30.57ID:ULaFt4eB0
お恥ずかしい質問ですが、もうひとつお願いします。

私は、変数の中身でもなんでも、とにかく確認したいときはmsgboxを使うんです。
そのほうが楽だし。

でも、こういう場所で回答するような人のほとんどは、>>541-542さんのように、
debug.なんとか ってのを使いますよね?
よくわからないけど、debugって、msgboxとは違って、どこかのウィンドウに表示させるってことだけ
は知っています。
そして、msgboxよりも、そっちの方がなんとなく本格派っぽいことも感じてます。

みなさん、どうしてmsgboxよりそっちを使うんですか?本当にそっちが便利なんですか?
0547デフォルトの名無しさん (ワッチョイ 9701-j5yB)
垢版 |
2019/02/28(木) 06:56:12.35ID:PI/gJuny0
>>546
msgboxだと毎回画面が出ちゃうから
0550デフォルトの名無しさん (ワッチョイ ffdd-r++/)
垢版 |
2019/02/28(木) 07:10:06.15ID:3O1mZe4/0
>>546
OK押すのメンドいし、押したら消えるし。
Printならイミディエイトウィンドウにどんどん溜まっていくから比較しやすいし。
VBE上でCtrl+Gで呼び出せる。
コード書くときは常に表示してるな。
他にもいろいろ便利に使えるからGGってみて。
0555デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
垢版 |
2019/02/28(木) 12:33:37.47ID:qWkUq+5ha
>>553
まああくまで傾向だな
システム開発に絶対はないから大まかに語るしかない

しかしまあプログラマって柔軟性がないから何か意見を言ったら必ず特殊な状況を想定して反論しようとする人が出てきて面倒くさいな
0556デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/02/28(木) 13:23:20.67ID:qor22oN3H
柔軟性がある人は出世するからね
0559デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/02/28(木) 14:36:57.48ID:qor22oN3H
だから日本は開発が遅いんだよ
アジャイルでやれ
0566デフォルトの名無しさん (アークセー Sx0b-Yt/p)
垢版 |
2019/02/28(木) 23:20:59.71ID:JVzuLoidx
Variant型がないとそれはそれで不便
実行時にならないと変数の保持データの参照型やデータ構造が決定できないような関数を定義するときには必須
Object型では限界があるし、多態性とか考えたら特に
0568デフォルトの名無しさん (スップ Sd3f-IK5z)
垢版 |
2019/03/01(金) 08:24:19.03ID:KSyELWIpd
だから意識して使うぶんには良いんだよ。
Variant配列で高速化は良くやるだろ。
あるいはあえていろんな型を受け付ける関数を作る場合とか。

俺はInteraceはあまり使わんね。
同じプロパティを持ったクラスを複数作ってグループとして使う場合でもそこまでしなくて良いだろと考える。
0569デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
垢版 |
2019/03/01(金) 08:58:16.79ID:IB7Yh9y1a
プログラムの基本的な良い習慣を実践すればVariantなんてそう使うことはない
使うとしてもシートIOなど僅かな用途だけだから業務ロジックまで影響することはまずない
0570デフォルトの名無しさん (ワッチョイ 9f90-W5e4)
垢版 |
2019/03/01(金) 09:03:46.13ID:BWIoX5Sk0
プロ雑談者どものくだらん蘊蓄語り合いなんぞどうでも良いから質問者の方々は
遠慮なさらずにどうぞ〜
0571デフォルトの名無しさん (ブーイモ MM3b-sBsz)
垢版 |
2019/03/01(金) 12:55:03.48ID:3XNO5Z9qM
コードって色々書く場所あると思うんですけど、ある程度共通の切り分けってあるんですか?
フォームにはあまりややこしいものはかかないで標準モジュールを使うとか。
逆にフォームで書けるものは複雑でもそこで終わらせたほうがいいとか。
今迷ってるのはシート1のデータを加工してシート2のデータにマージさせる場合どこに書けばいいんだろうってことです。
そのシートごとに別けるとバラけて解りにくくなるしみたいな感じです。
0573デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/03/01(金) 13:26:59.89ID:HgS5037SH
>>571
標準モジュールに Sub MergeSheet1To2 とか作ってCallすれば、他人が処理部を見なくても「このボタンを押すとマージされるんだなぁ」と想像ができる。
自分はフォーム内は処理に使うデータのチェックくらいにしてる。
0574デフォルトの名無しさん (ワッチョイ 9f01-IBRN)
垢版 |
2019/03/01(金) 14:04:11.91ID:+h/xS+gL0
フォームモジュールって細々としたイベントのプロシージャであふれちゃって見にくい
だからできるだけ標準モジュールに切り分けてる
例えばフォーム上の複数のTextBoxに全く同じ入力規則を設けたい時なんかは
TextBox・KeyCode・Shiftを引数とするプロシージャを標準モジュールに書いて使い回ししてる
さっきもそういうの書いてた
0576デフォルトの名無しさん (スップ Sd3f-IK5z)
垢版 |
2019/03/01(金) 18:53:01.98ID:KSyELWIpd
>>571
そのフォームで完結させたい時はフォームに全部書く。
汎用的なのは標準モジュール、汎用的でなくてもいろんな所から使い回す場合も標準モジュールだな。
シートモジュールにはシートのイベントプロシージャ以外書かないのが基本だけどそのシートのイベントプロシージャと一緒にしたい理由でシートモジュールに書くこともある。

意味論というか、何処に書くかは内容で決める。その方が後でコード見る時に視認性も良くなる。
0578デフォルトの名無しさん (ワッチョイ d783-nvQ/)
垢版 |
2019/03/01(金) 20:18:09.30ID:S/p2I5Nx0
シート1だけでしか使わない関数はシート1
その関数の中で使う関数で他でも使う汎用関数は標準モジュール
シート1のデータを加工ってあるが、それが将来にでも他のシートでも使いそうならその加工関数は汎用化して
標準モジュール。 シート1でしか使わないのならその加工関数はシート1に書く
0579デフォルトの名無しさん (ワッチョイ 9f7c-L+km)
垢版 |
2019/03/01(金) 21:39:17.32ID:41cCIQF20
上級者の人がどう使っているかなんとなく解ったような気がします。とりあえず
【クラスモジュール】汎用性のある関数
【標準モジュール】 大きな処理
【シートモジュール】【フォーム】極力使わないが他と絡まない短いコードなら完結しても良い
という感じで試してみようと思います。
あとは関数名の最後に呼び出しする関数がある場所を付けてみようと思います。
何をやりたいかで構成も変わると思うのでそこらへんも加味しながら試してみます。
参考になりました、ありがとうございます!
0584デフォルトの名無しさん (アークセー Sx0b-Yt/p)
垢版 |
2019/03/02(土) 01:21:31.95ID:Po9hNmd9x
>>579
汎用性のある関数を記載する場所だけど、VBAの仕様ではクラスモジュールではなく標準モジュールの方が都合が良いよ
何故なら自作のクラスモジュールに記述した関数を呼び出す場合、その自作クラスのオブジェクトのインスタンスを生成した後にそのオブジェクトのメソッドとして書くという手間が要る
つまりマシンメメモリの無駄食いになるしコーディング量も増える
標準モジュールならば関数名を書くだけで呼べるので余程気楽

適当にググったときに出てくる、OOP原理主義のJavaプログラマあたりが言うところの「汎用性のある関数はクラスに」っていう考え方は、VBAには当てはまらないので注意だよ
0585デフォルトの名無しさん (ワッチョイ f7ce-uydA)
垢版 |
2019/03/02(土) 02:50:08.40ID:eoNuxzNL0
>>572
ワークシートなんて可読性最悪じゃん
セルには数式が1つしか書けないし条件付き書式も内容を確認するのが面倒

条件付き書式が設定されてる範囲を視覚化する方法ってないよな?俺が知らないだけ?
0587デフォルトの名無しさん (アークセー Sx0b-Yt/p)
垢版 |
2019/03/02(土) 09:24:48.87ID:Po9hNmd9x
>>572
>>585
可読性を高める唯一の方針とは言わんが、正直下手に変数にブックレベル以上の参照スコープを持たせて値やオブジェクトを操作するくらいならワークシートの機能を使った方がよくねって場面はいくらでもあるな
エラーとかでプログラムが停止したときにセル値と違って変数に格納された参照ポインタは揮発するし
0588デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
垢版 |
2019/03/02(土) 09:34:34.03ID:heck9gfNa
ワークシート関数の何が良いかというと副作用がないことだよ
ぶっちゃけ重要なのはそこだけ
それ以外ではセル内にだらだら式を書くと醜いなどデメリットしかない

なのでVBAで普通に副作用がない関数を書けばいい
副作用のない関数ならVBAからもセル内式からも使いやすい
しかもセル内式と違って見やすく管理しやすい
0589デフォルトの名無しさん (アークセー Sx0b-Yt/p)
垢版 |
2019/03/02(土) 09:47:47.22ID:Po9hNmd9x
VBAの方が見やすくて管理しやすくてワークシート関数は見にくいって図式が成り立つかどうかは正直処理を書くやつのスキル次第だけどな

ワークシート関数は必ず内部スコープが()で括られるリスト形式だから、処理構造が簡潔に可視化できるメリットがあるとも言えるわけだし
0590デフォルトの名無しさん (ワッチョイ bf8c-9NtP)
垢版 |
2019/03/02(土) 10:15:37.68ID:VydunwR60
自分は>>572とほぼ正反対のやり方でやってきた
シートは使い捨てのデータとちょっとした設定情報を置いたり、あとは結果を出力する場所としてしか使わないな。
使い捨てのは別だけど、ツールとして繰り返し使うブックのシートに関数はほぼ書いてない。
0592デフォルトの名無しさん (アウアウエー Sadf-hSmr)
垢版 |
2019/03/02(土) 10:34:03.78ID:1SfH4HCRa
>>591
式に名前を付けたければ単一値ならセルに名前付けりゃいいし、ベクトルならテーブルにしてカラム名付けりゃいい
VBAで関数自作してもいい
VBAの中でループぶん回すよりは遥かに見通し良いわ
0593デフォルトの名無しさん (アウアウウー Sa9b-zhdC)
垢版 |
2019/03/02(土) 10:46:06.68ID:heck9gfNa
>>592
そもそもセル名前自体が管理しにくいので論外
セル名と数式の関係性がパッと見てわからないし
セル名と数式がひも付けられて管理されてると言われなきゃ後任が気付かない
VBA関数ならこの関数名はこの定義って誰でも一目でわかる

本来の出力でない余計なカラムはノイズになって邪魔
名前で管理したい項目が増えたらノイズだらけになってなにを説明したい表なのかわからなくなる
0599デフォルトの名無しさん (アークセー Sx0b-Yt/p)
垢版 |
2019/03/02(土) 18:22:41.70ID:BmvnLX83x
>>598
ワークシートの機能ってのはワークシートの機能一般のことでしかないだろ
ワークシートの特定の機能を想定して話をしてるんじゃない
ワークシートの機能を使えば事足りる処理をわざわざVBAのスクラッチでやろうとするのは車輪の再発明の極みだという話
0601デフォルトの名無しさん (JP 0Hdf-lo0V)
垢版 |
2019/03/02(土) 19:30:50.79ID:6n8BrDHBH
With ワークシート
.の機能ってのは
.の機能一般のことでしかないだろ
.の特定の機能を想定して話をしてるんじゃない
.の機能を使えば事足りる処理をわざわざVBAのスクラッチでやろうとするのは車輪の再発明の極みだという話
End With
0607デフォルトの名無しさん (ワッチョイ 377c-vuRV)
垢版 |
2019/03/03(日) 14:18:18.29ID:ilhG1tLW0
そこはかとなく臭うというか湧き出るダサさが嫌い
0609デフォルトの名無しさん (アークセー Sx0b-yUTo)
垢版 |
2019/03/03(日) 19:26:33.74ID:2dKZwCIHx
エクセルのオブジェクトモデルでメソッドが提供されてるような機能をわざわざVBAでスクラッチするなって意味もあるんじゃね
ListObjectオブジェクト(テーブル)の存在や機能を知らずに、同一列内のセル数式ほコピーの機能を自作するような話だろ
0610デフォルトの名無しさん (ブーイモ MM3b-hSmr)
垢版 |
2019/03/03(日) 20:55:07.59ID:C10iXUczM
初心者です。わかる方いましたらお教えください。

IE.Visible = False
として、
IE.Quitが何らかの理由で実行されなかったり、それを書かなかった場合
どうなってしまうんでしょうか…?
バックグラウンドでずっとフワフワといるんでしょうか?
見方もよくわからないタスクマネージャーで見てみるとアプリケーションとしてはたぶん起動されていませんでした…
IE.Visible = Falseとした場合はもしかして特に閉じる指示が必要ないのでしょうか…?
0611デフォルトの名無しさん (ワッチョイ f7ce-uydA)
垢版 |
2019/03/03(日) 21:00:52.17ID:sl8Y8jOC0
>>610
バックグラウンドでずっと動き続ける、が正解

ちゃんと起動してないのはコードがおかしいかタスクマネージャの見方がおかしい
そこをTrueに変えるだけでちゃんとIEのウィンドウが表示されるか確認
0612デフォルトの名無しさん (ブーイモ MM3b-hSmr)
垢版 |
2019/03/03(日) 21:44:32.70ID:C10iXUczM
>>611
Trueに変えるだけで表示はされたので、タスクマネージャーの見方がおかしかったようです
ちゃんとバックグラウンドなんとかの欄では起動されていました
ありがとうございました…
0613デフォルトの名無しさん (ワッチョイ 3791-IK5z)
垢版 |
2019/03/04(月) 09:46:01.18ID:TvaJY4yu0
関数使うかVBA使うかも内容で決める。
関数だと物凄く重くなることがある。
Sumproductとかを多用した場合とか、複数シートの集計を1日の集計としてさらに1ヶ月分の集計するとか。
自動計算を切れば良いんだけど、運用で微妙だね。
それに昔、銀行の仕事で大量のデ―タとSumproductのせいで1回の計算でさえいつまでたっても終わらないことがあった。
その時はVBAに書いたら5秒で終わった。
0616デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/03/04(月) 11:15:22.83ID:gwy/L6iPH
WorksheetFunctionプロパティで呼ぶもの(sumとかvlookupとか)がワークシート関数
VBAでしか使えないもの(CIntとかInstrとか)がVBA関数
上記と自作関数をまとめて関数
0617デフォルトの名無しさん (ワッチョイ bf68-W5e4)
垢版 |
2019/03/04(月) 11:25:35.49ID:vFn2j9Kt0
>VBA関数
標準関数だろう
エクセルの場合はVBA標準関数とでも言うべきか

>自作関数
ユーザー定義関数という名称がある

まぁ俺は関数としか呼ばんけどな、ハハハ
vbaでワークシート関数使う時はそう呼ぶ
0618デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/03/04(月) 11:45:46.92ID:gwy/L6iPH
>>617
0629デフォルトの名無しさん (アウアウエー Sadf-vuRV)
垢版 |
2019/03/05(火) 03:34:27.88ID:VDry4yCPa
馬鹿には無理
0630デフォルトの名無しさん (ワッチョイ d709-nvQ/)
垢版 |
2019/03/05(火) 05:56:45.90ID:pou1Iepn0
>>628
見てきたけど、なんかすげえめんどくさそう。出来ることも見新しいことってほとんどないじゃん
普通のWin32APIとかやったことあるのか。そっち勉強した方が遥かにまし。 VBAでもやれるから
0635デフォルトの名無しさん (エムゾネ FFbf-IK5z)
垢版 |
2019/03/05(火) 12:44:55.98ID:bZMGULjeF
>>623
日本語が理解出来ないようだな。
VBAと関数を対比させているんだからここで関数と言ってるのは"VBAの関数"のことでは無いと解釈するのがまともな日本人だ。


>>624
???
それは日本語として変だ。
USBメモリはUSBでは無い。
VBAの関数は関数ではある。
そもそもの例が適当でないわけだ。

>>625
文脈や、やり取りでVBAの関数なのかワークシート関数なのかを判断する必要があるのは>>66>>142>>172も一緒だ。
お前らと違って普通の日本人は文脈ややり取りから判断出来てるんだよ。
>>614のようなことを言い出すのはお前らのような頓珍漢な奴らだけだよ。
0641デフォルトの名無しさん (ワッチョイ 377c-nl/e)
垢版 |
2019/03/05(火) 13:32:20.37ID:YOwkwz810
Excel Python API とかも Excel.js Office.js とかと同じ扱いになる悪寒
0646デフォルトの名無しさん (ワッチョイ ff2c-hSmr)
垢版 |
2019/03/05(火) 21:11:49.71ID:WmyrgrGT0
会社で異動になった人が作ったマクロの稀に出るバグを直そうと頑張っています。
ちょっと怪しいかなと思ったプロシージャがあるので見にくく長いと思うのですが見て頂けませんか?
勉強しながらの初心者です。

Sub wait(IE As InternetExplorer)
Const リトライ = 2
Dim IEDOC As HTMLDocument
Dim ReCount As Long,i As Long

Do
«略»
Set IEDOC = IE.Document
«略»
Loop While IEDOC Is Nothing

If IEDOC.frames.Length < リトライ Then
ReCount = リトライ
Else
ReCount = IEDOC.frames.Length
End If

For i = 0 To ReCount
Do While IE.Busy Or IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Next
End Sub
このあとすぐに書き込みに参ります
0647デフォルトの名無しさん (ワッチョイ ff2c-hSmr)
垢版 |
2019/03/05(火) 21:26:50.63ID:WmyrgrGT0
オレンジの部分がIE.Busy = Trueという風に教科書通りになっていないのですがこれで大丈夫なのでしょうか
上手いことちゃんとなっているか調べようとやってみましたが私には難しかったです

そして水色の部分なのですが、フレーム数を取得してその数だけ念の為回しておくという感じでしょうか
フレームがいくつかあると取得のたびにIE.BusyがTrue,Falseに切り替わると聞いたのでそのためで合っていますか
それよりもさっき調べて出てきた

'完全にドキュメントが読み込まれるまで待機する
Do Until IE.document.ReadyState = "complete"
DoEvents
Loop
ではダメなのでしょうか、別物でしょうか

ざっとみておかしい部分はありますか?
図々しくすみません

https://i.imgur.com/DQxGNB5.jpg
0648デフォルトの名無しさん (ワッチョイ ff2c-hSmr)
垢版 |
2019/03/05(火) 21:32:38.87ID:WmyrgrGT0
どういうマクロかと言うと、IEを開いてリンクボタンをいくつか押して文字を引っ張ってきてIEを閉じるというのを何度か繰り返すものです。
リンク先を正しく閉じられていないまま次の回転に入っていることが稀にあるのです
0649デフォルトの名無しさん (ワッチョイ bf68-W5e4)
垢版 |
2019/03/05(火) 21:58:09.97ID:yUBkGE+g0
>>646
別物だな

>>646はvbaオブジェクトのプロパティ
WebBrowserControl.ReadyState
https://docs.microsoft.com/ja-jp/office/vba/api/access.webbrowsercontrol.readystate

>>647はwebのapi
Document.readyState
https://developer.mozilla.org/ja/docs/Web/API/Document/readyState

どっちが信用できるかは分からない
どちらにしてもIEオブジェクトがどこまでwebの技術に対応してるか分からない。難しい

かなり雑な解決策としては、
>リンク先を正しく閉じられていないまま次の回転に入っている
とりあえず必ず開いていると仮定して、最初に閉じる処理を噛ませばいいだけな気もする

あと個人的にだけど、untilはあんまり好きじゃない。「否定の否定」が出て来ないように注意した方が良い。あれは読みづらくなる
とりあえず応急処置として、併用してみてはどうかな。うまくいくかどうかはわからない

Do While IE.Busy Or _
IE.readyState <> READYSTATE_COMPLETE Or _
IE.document.readyState <> "complete"
DoEvents
Loop
0650デフォルトの名無しさん (ワッチョイ 9f34-0snV)
垢版 |
2019/03/05(火) 23:41:58.62ID:b71Efr460
IE11からreadystateもbusyも使えなくなったとかどこかで見た
利用出来ないという意味ではなくて使い物にならないという意味で

なので移動後に表示されるタブ見つけたら、とか移動後に表示される文字列を見つけたらという条件で対処してるわ
0653デフォルトの名無しさん (ワッチョイ 9701-gWFi)
垢版 |
2019/03/06(水) 00:08:19.97ID:qZfNBEKA0
>>646
・ IE.Busy = Trueという風に教科書通りになっていない
「if A then B」自体が既に「AがTrueならB」っていう意味だから、更に「= True」は冗長

・ フレーム数を取得してその数だけ念の為回しておくという感じでしょうか
作者はそのつもりだったんだろうけど、Whileの条件が真になった瞬間に全ループが終わるだろうから無意味
その後何かがFalseになってもEnd Subになる

・完全にドキュメントが読み込まれるまで待機する
偶にIEの受信が終わってもDocumentが読み込み終わってない時があるから、付けたほうがいい
フレームの件も、フレーム毎にdocument.ReadyStateを待つことで解決できる(ことが多い)

>>649
VBAは短絡評価出来ないから、IE.documentが取得できないとreadyStateプロパティが見れずに参照エラーが起きるよ
先にIEを待ってから、安全策としてdocument.readyStateも確認すると安定してDOMが使える
0654デフォルトの名無しさん (ワッチョイ d701-9DxJ)
垢版 |
2019/03/06(水) 00:12:35.24ID:M8vFX/4l0
csvを読み込む手法はいくつかありますが以下のような場合どの方法が最適でしょうか
1行1レコードになっていない(セル内改行あり)
csvが複数ありそれをすべて読み込んで集計処理がしたい
普段はデータインポートやopenで1行づつ読み込んでいましたが1行≠1レコードだと難しいのかと考えています
0655デフォルトの名無しさん (ワッチョイ ff2c-hSmr)
垢版 |
2019/03/06(水) 00:17:18.56ID:0oqXehnm0
>>649
長文でわかりにくい環境にも関わらず教えて下さってありがとうございます
参考にして、これから開きたいリンク先のウィンドウタイトルと同じタイトルを持ったウィンドウがすでにあれば閉じるという風に書いてみます
下の方に書いてくれたコードも試してみます
本当にありがとうございました
また下らない質問者したらすみません

>>650
会社のパソコンが古いのでしばらくは大丈夫そうです
ですが重要なことなので覚えておきますありがとうございます
0656デフォルトの名無しさん (ワッチョイ 9701-gWFi)
垢版 |
2019/03/06(水) 00:29:35.50ID:qZfNBEKA0
>>655
既存のウインドウを触るのは初心者にとっては結構大事だよ
閉じれてないのはQuitメソッドの前に次の処理が入ってしまってるだけだと思うから、
処理が終わったと思われる場所に自分でコードを挿入したらどうだろう
0659デフォルトの名無しさん (オッペケ Sr0b-9DxJ)
垢版 |
2019/03/06(水) 00:54:59.22ID:jXlQSKwgr
>>657
試してないので想像ですが1ファイル数mb程あるので一括読み込みで取得出来るんでしょうか…?
変数に入るのか、pc動作的にどうなのかが気になりますが…一度試してみます
0662デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/03/06(水) 07:35:28.45ID:3ub5rlP9H
IEってBusy以外にステータスも見てないとループ抜けちゃわなかったっけ
0664デフォルトの名無しさん (スプッッ Sd3f-IK5z)
垢版 |
2019/03/06(水) 08:14:30.41ID:OZZFIuGOd
両方見てても抜ける時が有る。
滅多に無いけど。

例えばClickで遷移する場合に、抜けてからBusyになることがあった。
Submitに比べてClickは単純に文字通りClickするだけなので遷移しないページも有るから必ずBusyになると想定されていないと想像してる。
それ以降Clickの時は最初にSleepを入れるようにしてる。
0665デフォルトの名無しさん (スプッッ Sd3f-IK5z)
垢版 |
2019/03/06(水) 08:20:35.12ID:OZZFIuGOd
>>654
別に方法は色々あると思うけど1行ずつ読み込んでも良いんじゃない?
1行ずつでも条件に合うまで1レコードとしなければ良い。
1レコードの最後にも改行は有るんだろ。

もし1行ずつ読むなら1レコード内に複数改行が有る可能性を考慮すること。
0666デフォルトの名無しさん (ワッチョイ ff2c-Im2K)
垢版 |
2019/03/06(水) 08:57:22.69ID:Uli2bEJM0
>>654
Ruby では、列をダブルクオートで囲むと、その中にカンマや改行を含める事もできる。
他の仕様も含め、詳しくはRFC4180を参照

require 'csv'

p CSV.parse_line( "a,\"あ\nい\"" )
# => ["a", "あ\nい"]

\n は改行

列区切りはカンマで、外側の"〜" は文字列を表すための囲み。
内側の\"〜\" は、"〜"内での"〜"を表すため、\ でエスケープしている。列囲みを表す

a の部分は、\"〜\"で囲まなくてもよい
0671デフォルトの名無しさん (ワッチョイ bfab-GrE3)
垢版 |
2019/03/06(水) 15:05:39.78ID:p4qnJjw30
多分スレチだろうと思いますが、>>669をLibreoffice最新版に実装したところ戻り値に=LOESS(x,y,z,n)で指定したyの配列がそのまま表示されたのでコードどこか間違ってるか仕様変更したのを俺が見落としてるのかなと思って聞きました
ありがとうございました
0673デフォルトの名無しさん (ワッチョイ 9701-SKB1)
垢版 |
2019/03/06(水) 21:16:11.63ID:qNVr+Lwh0
指定した列以外の列を削除する方法を模索しています。
たとえば、ABCDE列の1行目にそれぞれ

あ い う え お

と入っていて、
"あ"と"う"と"お"以外の列を削除し、

あ う お

というよにしたく、
このようなプログラミングをしたのですが意図するように動作しません。
ド素人と罵られること承知で質問に参りました。
論理式自体考え方がおかしいものとも思っています。
どなたかお力添えいただけないでしょうか?

Sub 不要列削除()
Dim i As Long
For i = 1 To 50
If Cells(1, i).Value <> "あ" Or Cells(1, i).Value <> "う" Or Cells(1, i).Value <> "お" Then
Columns(i).Delete
End If
Next
End Sub
0675デフォルトの名無しさん (ワッチョイ 377c-u5eM)
垢版 |
2019/03/06(水) 21:31:48.30ID:LIhekGiK0
表示形式が混在したセルを見た目通りのまま表示形式が文字列の別のセルにコピーするいい方法ありませんか
例えばA1〜A3を、この見た目のまま表示形式が文字列のB1〜B3にコピーしたい場合
  A
1 $1,000
2 2019/1/1
3 9:30

@
 Dim buf() As Variant
 buf = Range("A1:A3").Value
 Range("B1:B3").Formula = buf '←そのまま入れてみる
B1〜B3は 3/6/2019、0.836111111、\10,000.00 になる

A
 Dim buf() As Variant
 Dim buf2(1 to 3, 1 to 1) As String
 buf = Range("A1:A3").Value
 For i = 1 to 3
  buf2(i, 1) = buf(i, 1) '←文字列型にして入れてみる
 Next
 Range("B1:B3").Formula = buf2
B1〜B3は 2019/03/06、0.836111111111111、10000 になる

@Aどちらも書式が勝手に変わります
ちなみにセル範囲を配列に直接つっこまず、文字列型の配列に1セルずつ buf = Range(i, j).Text みたいな感じで入れてからセルに貼り付けると希望の結果になりますがめちゃくちゃ時間がかかります(大量データに使いたいので)
他にやり方があれば教えてください
0678デフォルトの名無しさん (アークセー Sx0b-yUTo)
垢版 |
2019/03/06(水) 21:54:06.80ID:ZuXoITq7x
>>673
列インデックスで加算ループをしている途中で列削除をしてるから、削除した回数分だけ参照参照列の位置がおかしくなるのでは
例えば2列目を削除した後にループ処理の最初の処理に戻ると、次にi=3として.Cells(1,3)とセルアクセスしたときに見ることになるのは本来D1に位置していたセルになる
列削除した分インデックスがずれるので


こうやって減算ループにするのが正解の一つかと

Sub 不要列削除()
Dim i As Long
For i = 5 To 1 Step -1
If Cells(1, i).Value <> "あ" Or Cells(1, i).Value <> "う" Or Cells(1, i).Value <> "お" Then
Columns(i).Delete
End If
Next
End Sub

あるいは、列削除した場合にはEnd Ifの手前でiから1を引いてインデックス調整するようにしたりか
0691675 (ワッチョイ a37c-DZHv)
垢版 |
2019/03/07(木) 00:46:43.69ID:zt2fCEgu0
>>687
他のファイルは使えない状況なんです…

>>688
その処理がすごく時間がかかるので他の手段を探していました

諦めます
今回の事でRangeのValueやFormulaみたいにTextも配列に入れられるようにしてくれと心から思いました
色々考えてくれたみなさんありがとうございました
もしいい方法思い付いたらいつでも待ってます
0692デフォルトの名無しさん (ワッチョイ a701-ZBQD)
垢版 |
2019/03/07(木) 01:15:09.98ID:UmWyYgm40
描写と計算止めてCopyメソッドで10万行×30列を列ごとにコピペしたら一瞬で終わったが・・・
っていうかこれ以上増やそうとするとリソース不足でエクセルが悲鳴を上げるし、どういうデータをコピーしたいんだろ
0696デフォルトの名無しさん (ワッチョイ df67-Ly0m)
垢版 |
2019/03/07(木) 07:14:54.02ID:RImgiSgC0
>>691
>>684 の Application.ScreenUpdating = False
は効かないのか。 画面描画が止められるよ。やってないから適当なこと言ってるかもしらんが
画面描画以外で時間がかかるってどんなだよ。 ちょっと想像できんがなあ
なんでだろう
0697デフォルトの名無しさん (スッップ Sd32-hyvy)
垢版 |
2019/03/07(木) 07:24:21.94ID:ldY6B6U1d
>>691
valueで配列コピペした後に、セルに対してそれぞれ書式設定を手動もしくはマクロですれば?
書式は列ごとくらいは揃ってると思うし。
それもバラバラってことだと、そもそも集計の仕方が悪過ぎる。
0699デフォルトの名無しさん (スッップ Sd32-hyvy)
垢版 |
2019/03/07(木) 07:44:13.43ID:ldY6B6U1d
>>696
684じゃないけど、複雑に関数組んだりとか遅い関数が大量に入っててかつデータ数がエクセル上限近くで再計算に時間がかかるとか、あとセル上で反復計算やソルバー使ってたりするとある。
ただ684は書式がバラバラなセルを扱ってる時点で、複雑な計算をしてるとは思えないけど。
0700デフォルトの名無しさん (ワッチョイ df67-Ly0m)
垢版 |
2019/03/07(木) 07:52:53.03ID:RImgiSgC0
>>699
>>675をもう一度見て来いよ。 これだぞ。そんなややこしいことしている話ではないと思うが

>表示形式が混在したセルを見た目通りのまま表示形式が文字列の別のセルにコピーするいい方法ありませんか
0701675 (スフッ Sd32-tsl5)
垢版 |
2019/03/07(木) 08:38:04.86ID:QURDMn8Xd
再描画等定番の部分は止めています
セル数は100万ぐらい、列数、行数分回してTextプロパティを1セルずつ配列に入れる処理だけです
シートへの貼り付け処理ではなくこの取得部分に時間がかかります
同じ回数回すAや、Format関数、worksheetfunction.textを使った場合その半分以下の時間ですが望みの結果を得る方法はわかりませんでした…
0702デフォルトの名無しさん (ワッチョイ f2a2-ouaW)
垢版 |
2019/03/07(木) 10:57:17.39ID:QGzmAmpt0
コピーした後NumberFormatで整えればええんちゃうん?
Dim buf() As Variant
buf = Range("A1:A3").Value
Range("B1:B3").Formula = buf
Range("b1").NumberFormat = "yyyy/m/d"
Range("b2").NumberFormat = "h:mm"
Range("b3").NumberFormat = "[$\-ja-JP]#,##0;-[$\-ja-JP]#,##0"

データが多すぎて無理?
0705デフォルトの名無しさん (エムゾネ FF32-ekDA)
垢版 |
2019/03/07(木) 12:41:45.56ID:g1Ak82VsF
勘違いしてる奴が多いが、自動計算を止めたり描画を止めるのは初心者が速度アップのためにやる方法で、>>675のように速度アップの為に考えて組まれている場合には効果が無い。

上級者はこういう場合に描画止めたりしないよ。
考えずに組んで面倒くさい場合にやる奴はいるかもしれんけど。
0706675 (スフッ Sd32-tsl5)
垢版 |
2019/03/07(木) 12:42:12.66ID:QURDMn8Xd
>>702
あとからNumberformatを適用させるんでなく配列に入れる時点で適用させる手を考えたんですが、
適用させるのにworksheetfunction.textを使うと書式に「マイナス値は[赤]」みたいな色設定があるとなぜか1004エラーが出るし、Format関数使うと表示形式が標準の時なぜか値が「標準」という文字列になってしまいます
速度的にはtextプロパティ使うよりずっと速いんですが…もう訳がわからない
0709デフォルトの名無しさん (ワッチョイ ebce-2wIc)
垢版 |
2019/03/07(木) 18:02:24.90ID:6oCjCAip0
メモ帳にコピペすると書式が全部消えて見た目通りの文字列になる
メモ帳アプリの実体はエディットコントロールそのものだから、ユーザーフォームにエディットコントロールを貼っただけの作業場所を作って、そこ経由でコピペしてみたら?
0710デフォルトの名無しさん (ワッチョイ 12a6-/DyH)
垢版 |
2019/03/07(木) 18:03:18.10ID:hp531q160
UserForm1にTextBox1とCommandButton1、TextBox2とCommandButton2の計4つが配置され
UserForm2には入力フォームが配置されています。

CommandButton1からUserForm2を呼び出した時は、TextBox1に記入
CommandButton2からUserForm2を呼び出した時は、TextBox2に記入

させるには、どうすれば良いですか?
0713デフォルトの名無しさん (アークセー Sxc7-sOih)
垢版 |
2019/03/07(木) 19:03:35.19ID:qo/Sl71gx
>>710
やり方はいくつもある
一番簡単な方法を書くと、

Userform1側の各ボタンのクリックイベント内に、任意のセルや標準モジュール上のPublic変数等にコマンドボタンのオブジェクト名をコピーする処理を書く(Me.ActiveControl.Nameでフォーム上でフォーカスされているコントロールオブジェクトの名前を取れるのでこれを使う)

Userform2側のイベントコードではそのコピーされたボタン名を読み取って書き込み先のテキストボックスを判定するようにする
0714デフォルトの名無しさん (アウアウエー Saaa-CO8P)
垢版 |
2019/03/07(木) 19:11:06.28ID:ximLdO0ya
>>710
コマンドボタンのクリックイベントプロシージャで、グローバル変数に呼び出したボタン番号を格納→ユーザーフォーム2のコンストラクタでグローバル変数で分岐させる方法

もしくはコマンドボタンのクリックイベントプロシージャでユーザーフォーム2のマルチページコントロールのプロパティを変更する(value=1,2)方法もある
0715675 (ワッチョイ a37c-DZHv)
垢版 |
2019/03/07(木) 21:34:32.55ID:zt2fCEgu0
セル範囲をコピーしてクリップボードから直接二次元配列に入れるようにしたら何十秒もかかってたのが0.5秒になりました
ただ、クリップボードから切り出す時にうっかりセルの値に手を加えてしまわないかが心配です
単純にVbCrLfで行を区切って、VbTabで列を区切ってるんですがそれで問題ないんでしょうか?
0719デフォルトの名無しさん (アウアウエー Saaa-CO8P)
垢版 |
2019/03/08(金) 03:08:04.26ID:Tjqa7GxLa
システムの大規模化が想定されるならユーザーフォームでユーザーフォームを呼び出すのは危険w
ユーザーフォーム間の依存性を高めてしまうw
ここはユーザーフォームを呼び出すクラスを作った方がいいw
クラスを介して情報を渡せば安全だし再利用性も高まるw
0720デフォルトの名無しさん (ワッチョイ 1201-ouaW)
垢版 |
2019/03/08(金) 08:00:14.88ID:IUpgvQZO0
やっぱりuserformからuserform呼ぶのってよくないのか
こういうのってクラスモジュール使えるんだろうなって思ってたんだけど
余り使ったことなかたんで、ちゃんと勉強してみよう
参考書ぽちってきたわ
JavaとかC#を多少触ってきたからオブジェクト指向の概念は分かってるんだけど
VBAでの効果的な使い方をマスターしたいわ
0722デフォルトの名無しさん (ワッチョイ 1201-ouaW)
垢版 |
2019/03/08(金) 08:08:56.71ID:IUpgvQZO0
普通のコンストラクタには引数渡せないんだ
まぁその辺の限界も含めて一度勉強しておいたほうがいいとは思ってる
できることと出来ないことを知った上で、クラスを使う選択肢を持つことができればいいかなって
0725デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/08(金) 08:24:18.53ID:wvJFI7ubd
こういう場合にクラス使うの?
何か違うと思うんだが。

VBAでも見た瞬間にクラス使おうと思う場合もあるんだが、そういうことは少ないな。>>323のような話なら見た瞬間にクラスだなと思うんだけどね。
0727デフォルトの名無しさん (ドコグロ MM97-/Er5)
垢版 |
2019/03/08(金) 08:55:03.19ID:GpWg6Xx2M
逆にいうと、ワークシート上で人間が無理なく扱えるようなデータ構造にならざるを得ないから、
生え抜きのVBerが作りがちな酷いDB設計になりにくい
そういう良い意味でデータ構造に無理が利かないので、クラスでデータ構造を抽象化したくなるケースが少ないのだと思われる
0733デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/08(金) 18:55:16.76ID:aTSUMsKkd
???
会社のPCに既にAccessがインストールされているのにもかかわらず、
Excelで扱うような程度のものをDBとして扱いたい時に、SQL Serverインストールはじめちゃう人?

全てにおいてセンスねーわ。
0744デフォルトの名無しさん (ワッチョイ de8c-91/d)
垢版 |
2019/03/09(土) 04:02:18.85ID:83GbxNdW0
accessって開発続いてるの?
Excelを強化してAccessを見放すように思えてしょうがない
0745デフォルトの名無しさん (ワッチョイ b7f1-IjB2)
垢版 |
2019/03/09(土) 04:12:29.83ID:676zsyfX0
accessはウンコです
0749デフォルトの名無しさん (ワッチョイ 16da-/kwh)
垢版 |
2019/03/09(土) 09:22:46.51ID:Z89d69KF0
シート上に複数のテキストボックスを配置して、
KeyDownイベント + vbKeyRightとかvbKeyTabで、
テキストボックス間を移動出来るようにすると、
カーソルがたまに見えなくなるんだけど、回避策ない?
見えないだけで、存在はしているので、
文字は打てるんだけど、文字まで透明になっちゃう。
テキストボックスを何回か適当にクリックすると、
突然見えるようになる。
0752デフォルトの名無しさん (ワッチョイ a701-rbBm)
垢版 |
2019/03/09(土) 10:19:05.53ID:zk58FQoZ0
>>751
ボードと言ってるのはたぶんドライバのことだと思うけど、その可能性はあるよね。
いくつかバージョン違いを落としてきて試してみればいい。
とりあえずは、各メジャーバージョンが上がったばかりのは除いて、それぞれ最終リビジョンのを集めてきてかな
0753デフォルトの名無しさん (ワッチョイ 1e90-R+To)
垢版 |
2019/03/09(土) 21:56:21.30ID:QAZD12fZ0
excel vbaとaccess vba
どちらの方が実用的ですか?
0755デフォルトの名無しさん (ワッチョイ 1e90-R+To)
垢版 |
2019/03/09(土) 22:03:03.09ID:QAZD12fZ0
両方できて当たり前ですか?
0759デフォルトの名無しさん (オイコラミネオ MM0f-rbBm)
垢版 |
2019/03/09(土) 22:36:15.94ID:M4mulWlpM
>>755
超小規模ならExcel
テーブルの規模が大きくなってくるとAccess
Accessの何がいいかって言うとオレはレポートだと思ってる。あれを使いたいがために、オレはdbアプリ(フロントエンド)はAccess一択。
テーブルの規模がさらに大きくなってきたら、テーブルだけをoracle、SQLServerなりに移行。
そもそもAccessは大規模用ではないが、わかって開発すれば大規模用に寄せていくことはできる。
0763デフォルトの名無しさん (アウアウエー Saaa-/Er5)
垢版 |
2019/03/09(土) 23:38:00.61ID:ouuI5dEha
>>762
実際ほとんど放置されてるでしょ
そもそもAccessってノンプログラミングで専用アプリ風のDBアプリが作れるのがメリットなのであって、そこは全く否定するつもりはないけど
プログラミングするんなら他にもっと優れた選択肢はいくらでもあるよ
0765デフォルトの名無しさん (ワッチョイ 1e68-uGU8)
垢版 |
2019/03/10(日) 00:26:33.47ID:AZoiY/Tr0
中小企業は普通にエクセル・アクセス
使える人間が多いのが最大のメリット。事務員だけでも割とどうにかなる

エクセルvbaは死ぬほど使う
アクセスはvbaじゃなくSQLを覚えたほうが良い
でもSQL覚えるのって結構たいへんなんだよよねぇ
0766デフォルトの名無しさん (ワッチョイ a37c-DZHv)
垢版 |
2019/03/10(日) 00:34:07.81ID:/SA1VNEE0
とりあえずVBAはどっちでも同じだから、あとはどういう環境を用意されることが多いかと考えると圧倒的にExcelに縛られることが多いので実用で考えるとExcelだろうか
Accessでやる方が楽な時でもExcelでやらされることが多いし
0767デフォルトの名無しさん (ワッチョイ 1e68-uGU8)
垢版 |
2019/03/10(日) 00:37:17.38ID:AZoiY/Tr0
Accessは大抵前任者なりシステムなりが作っている場合が多いから、ほとんど触る事が無い
エクセルは事ある毎に0から作ったり改修する事多いからvbaはめっちゃ役に経つ
0769デフォルトの名無しさん (ワッチョイ a701-rbBm)
垢版 |
2019/03/10(日) 00:54:56.33ID:W5FlChvZ0
>>765
複雑になってくるとSQL知識は必要になるけど、クエリーデザイナ(QBEグリッド?)でほとんどできてしまう。
昔oracleでSQLゴリゴリ書いてたあとAccessのクエリーデザイナ見て「これ考えたやつ天才やな」とマジで思った。
選択も更新も削除も書けて、テーブル連結も表現できて、革命やなと。
0772デフォルトの名無しさん (アウアウエー Saaa-/Er5)
垢版 |
2019/03/10(日) 07:28:22.90ID:m5XGUhg5a
>>771
そもそも今時ローカル限定のDBなんてほとんど役に立たなくね?
ちなみに、https://support.office.com/ja-jp/article/ビデオ-access-web-アプリを作成する-10855ec0-3a12-4e6c-a67c-c88267f00a3c
> 重要 Microsoft では、SharePoint で Access Web App を作成および使用することはお勧めしなくなりました。 代わりに、Microsoft PowerApps を使用して、Web およびモバイル デバイス用にコードなしのビジネス ソリューションを作成することを検討してください。

だそうだよ
0776デフォルトの名無しさん (ワッチョイ a701-rbBm)
垢版 |
2019/03/10(日) 08:48:28.53ID:W5FlChvZ0
>>772
ローカル?
Accesswebアプリ?
だから、知らないやつは黙っとけと。
自分の周りで需要がないから、どこもそうだとは限らないって考えられないのか?
MSが推奨してても、そうならなかったこともあるだろうに(いちいち書かない)。
0777デフォルトの名無しさん (ワッチョイ a701-rbBm)
垢版 |
2019/03/10(日) 09:03:35.58ID:W5FlChvZ0
>>774
sfは使ってる側だが、Accessと比べてる意味がわからん。
それぞれメリットデメリットがあって、顧客の要望にどちらがよりふさわしいかだぞ。
Accessのときもあるし、そうでないときもある
office365が広がって、Accessで作るメリットは開発側も、アプリ導入側も確実に増えてきた。
例えば、visualstudioで作るなら開発側は買わないといけない(小規模会社以外は)
これだけ書いてわからないとしても、スレ違いもあるからこれ以上議論しない。Accessスレでも、くだらないから議論しない
0780デフォルトの名無しさん (ドコグロ MM97-/Er5)
垢版 |
2019/03/10(日) 10:21:42.56ID:jNouaRswM
顧客の要望笑さんのように目の前の要件だけ片付けてトンズラできる立場なのか、
将来も含めて面倒見ないと行けない立場なのかでも全然違うわな
後者ならさすがにAccessは正当化できないわ
0789デフォルトの名無しさん (アークセー Sxc7-sOih)
垢版 |
2019/03/10(日) 13:42:15.79ID:UR1GQMqix
Access VBAは提供機能の環境結合度がExcel VBA以上に強いイメージを持ってるんだけど、Office365になってもバージョンアップによる互換性の問題は変わらない感じ?
0791デフォルトの名無しさん (ワッチョイ a701-rbBm)
垢版 |
2019/03/10(日) 16:10:54.47ID:W5FlChvZ0
>>789
提供機能の環境結合度が何を言ってるかわからないが、昔作ったやつの改造質問が時々来て、軽く動かす範囲において互換性に問題があったことはない。
互換性問題でお客様から問い合わせ来たこともない。mdbの話し。

>>790
違います(indeed風w)
それぞれで無理なく完結できるならわざわざ分けない。そもそも「GUIをExcel」とするほどの優位はない。
データストア(テーブル)をシートでゴニョゴニョできる範囲ならExcelでやってもいい。デカくなるとAccess。

最近経験したのは、Accessのグラフが昔のママだったので、新しいグラフを使うためにExcelに結果出力することにした
(ながっ。Accessスレ過疎ってるけど、そっちで書いたとここに書けば何人か見に行ってくれると思う)
0793デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/10(日) 17:36:22.03ID:hFpGjFbxd
どうでも良いけどセンスね―奴が多いな。

Salesforceってw
まず、会社で自分が使う環境になってからの話だろうに。
AccessやExcelと同列で語るとは笑わせる。
SQLサーバーも一緒。

Accessは単体で完結する使われ方も有るけどフロントエンドで使われる場合もある。
で、どちらの場合もSQLサーバーとは比較の対象にはならない。

俺はトヨタとかホンダとかと同じ知名度の会社で働いてるが普通にAccess使ってる。
というか、大きな所は結局いろんなツール使ってる。
0798デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/10(日) 18:25:09.94ID:hFpGjFbxd
馬鹿でかいDBサーバーが何個もあって、ちゃんとしたシステムもある。
けど、いろんな部所が独自にツール作ってるし、その馬鹿でかいDBに参照だけさせて貰って、Accessをフロントにしてるのもある。
Excelをフロントにしてるのもあるな。

もちろん、好き勝手が出来るわけじゃないが。
0799デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/10(日) 18:34:31.65ID:hFpGjFbxd
>>797
そもそも大きな会社のことが分かってない発想だな。
大きな会社は新しい考え方してる部署もあるし、古い考え方してる部署もある。
普通に色んな部署があるからAccess使う所もたくさんある。
0802デフォルトの名無しさん (アークセー Sxc7-sOih)
垢版 |
2019/03/10(日) 19:29:50.41ID:UR1GQMqix
>>799
全社システムを入れてデジタル化を推進しようとしてるかと思えば、部署や事業分野毎に統制レベルがまちまちだったりして結局色んなシステムやアプリを使ってたりするのがいわゆる大企業だよな
もちろん電話FAX紙資料頼みの昭和的なやり方の部分が残ってることもある
0810デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/10(日) 23:03:17.67ID:hFpGjFbxd
>>802
論点の分かってないバカは何処にでもいるな。
つまり結論は、Access使ってるということだよ。

それにAccessと比較できるようなソフトが無い。
それが分からんからセンスがね―と言われる。
FileMaker挙げられたら分かってる奴だろうが。

>>803
そりゃ残念だったな。
Officeは部署で買うもんじゃ無いと思うぞ。
聞いたこと無いけど。
うちの会社は全員Access入ってると思うぞ。
0815デフォルトの名無しさん (ワッチョイ 927c-fEQS)
垢版 |
2019/03/11(月) 00:09:57.12ID:sN5dooJH0
VBAより細かいことができて簡単でメジャーでお勧めってJAVAでいいの?
用途は個人で簡単なアプリを作る程度です。
0817デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/11(月) 00:12:43.40ID:B6nWiYCUd
>>813
SQLサーバーにするようなのは手間もそうだが、規模が違うだろ。
そんな話になるなら最初からExcelやAccessの話になんてなってない。

そんなこともわからね―のかよ。
自由にできる中小とは違うんだよ。
0819デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/11(月) 00:21:09.07ID:B6nWiYCUd
>>816
問題は何で組むかって話になるだろうね。
昔、MSDEで組んでた時に使ってたけど、Accessなんか競合するようなもんじゃない。
まあ、VBAでも組めるからExcelやAccessから繋いでも良いんだけど、それって本末転倒じゃね?

結局VisualStudioで組む話に成るんだろうな。
0830デフォルトの名無しさん (ワッチョイ ebce-2wIc)
垢版 |
2019/03/11(月) 11:33:05.59ID:Mb6GwggX0
まあホスト側でPDFを作っちゃって、あとは印刷するだけみたいなシステムも最近は増えてるけど、
送られて来るのは印刷したい数字だけで、クライアント側で印刷イメージを組み立てるシステムだって普通にあるぞ
0832デフォルトの名無しさん (スフッ Sd32-2wIc)
垢版 |
2019/03/11(月) 11:44:06.02ID:04nfU8jWd
>>831
ここは大企業やサーバ管理者専用スレじゃないし
世の中にはパソコン1台だけで経理や発注をやってるような中小零細だってある
現実にExcelで作られた帳票は世界中を駆け巡ってる
0834デフォルトの名無しさん (アウアウウー Sac3-cVal)
垢版 |
2019/03/11(月) 12:56:27.77ID:zh+jpn1Ya
>>823
印刷は確かに若干弱いがエクセル帳票は悪くないアイデアだと思う
プログラムで生成物からデータを取得できるから帳票作成のスモールテストを作りやすい
まあCIサーバーで動かないと意味がないのでVBAの出番はないけど
0843デフォルトの名無しさん (オイコラミネオ MM0f-rbBm)
垢版 |
2019/03/11(月) 18:40:41.61ID:fslMg+hgM
>>837
帳票は基幹システムでも出すし、現場のAccessからも出します。
携帯ショップのはあくまで例えだが、アプリで出してても何らおかしくない。webからサーバで作成した帳票出してたとしても世の中全てがそうじゃない
バカはすっこんでろ
0845デフォルトの名無しさん (ワッチョイ de8c-4aR2)
垢版 |
2019/03/11(月) 18:52:52.30ID:tsrenNBW0
もともとAccessなんかよりSQLServer使えばいいのに、という意見に対して「センスが悪い」と評したやつがムカつくんだよね

それってただの自己擁護じゃねえの?
0847デフォルトの名無しさん (アウアウウー Sac3-q+B7)
垢版 |
2019/03/11(月) 19:19:43.98ID:VQvu/Jc3a
まーまー、みんなケンカするなよ。ケンカしたくてここに来てるやつはどっか行ってくれ。楽しく、とまではいかないにしても、他人の意見を尊重して、まったりと行こうぜ
0852デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/11(月) 21:21:38.01ID:B6nWiYCUd
>>845
最初に「今Accessを使う意味」とか、言い出した奴が都合が悪くなると人のことを上から目線だとか言い出すからなあ。

そもそもの話はAccessにしちまうからExcelでDB処理することは多く無いって話から始まっている。
(実際は結構あるけどAccessと食い合うって話)

最初から、バックエンドSQLサーバーでフロントがExcelって話なら、SQLサーバーじゃなくて正にExcelでDB処理の話になって、俺の主張に一致するから反論にならん。それとも絶対にExcelフロントでAccessフロントはあり得ないって話ならもう一度センスね―と言ってやる。
Excelフロントはあり得るけどAccessフロントの方がよりあり得るわ。

いやいやそういう構成ではExcelでDB処理には該当しないというなら、ExcelでDB処理とはExcel単体でのDB処理ということになるから、それに対しての比較対象にSQLサーバー持って来たの?という話になる。
この場合もやっぱりセンスね―と言ってやる。

だからそもそもの話に反論としてSQLサーバーを挙げるってことはExcelフロントではないということを意味するんだろう。
つまりOffice系では無く、開発系で組むという話だろう。
Accessで済むようもん、場合によってはExcelで済むようもんをC#とかを使って組むの?

部署内での打ち合わせ資料をWordで作ると言ったらPagemakerの方が良いと言われた気分だわ。
0854デフォルトの名無しさん (ワッチョイ de8c-4aR2)
垢版 |
2019/03/11(月) 22:03:37.96ID:tsrenNBW0
>>852
3回読んだが意味がよく分からん
俺の最初の主張は>>729から始まってるんだが、「データはExcelじゃなくてAccessに置け」という他の意見に対して
「いや今時AccessなんかじゃなくてSQLServerでしょ」というのが意図だ。
そっからなんかこじれてるんだが、ここでの俺の前提はフロントUIはエクセルというものなんだよね。
ExcelからのSQL発行という点でUI表面上の差が大してないと考えて比較している。
0856デフォルトの名無しさん (ワッチョイ a3e6-uGU8)
垢版 |
2019/03/11(月) 23:03:46.33ID:tJkNrW1I0
>>854
フロントがExcel程度でなんとかなるデータならAccessで十分だろ
すでに大量のデータがSQLServerに溜まっているならそっち使えばいいけど
Excelでデータ入力とか考えただけでも吐きそう
0867デフォルトの名無しさん (ワッチョイ de8c-4aR2)
垢版 |
2019/03/12(火) 08:15:48.17ID:hut6v0dp0
うちなんかSQLServer導入して部署内誰でも使えるようにセッティングしてるのにずっとAccess使い続けてる。
Excel VBAからADOで繋げてるパターンなんで移行は手間じゃないと思うんだけど2〜3人が試しに使い始めただけ。
思い通りになんていかないよ。
社内稟議通した人がお気の毒w
0868デフォルトの名無しさん (スプッッ Sd52-ekDA)
垢版 |
2019/03/12(火) 08:18:57.13ID:xgWEcpqAd
>>854
八ァ?
>>729から始まってるんだよな。
その前に「デ―タはExcelじゃなくてAccessに置け」なんて意見が何処にある?
>>729の前にAccessのことを言ってるのは>>728しか見当たらないんだが。

で、俺が言った>>728は別に「デ−タはExcelじゃ無くてAccessに置け」なんて言って無いんだが。
誰かにこうしろ等と言って無いし、データをAccessに置く等と限定してないぞ。

その上、「今時Access」?
お前は一体何様だよ。
どっちが上から目線だ?
上から目線でも回答が頓珍漢じゃなければセンスね―なんて書かね−よw
0871デフォルトの名無しさん (ドコグロ MMea-DUKr)
垢版 |
2019/03/12(火) 12:45:42.87ID:fAXK62aoM
>>867
そもそもそれエンジンの話なのか帳票とかのデザインの話なのかはっきりしてくれ
あと人は今困ってないなら移行なんてしないよ、トラブル招くかもしれないしな
移行させたいならAccess使用禁止ぐらいしないとダメ
どうせ導入した奴もそこまで腹くくってないだろ
0876デフォルトの名無しさん (ワッチョイ a701-rbBm)
垢版 |
2019/03/12(火) 22:19:10.50ID:aDT3+eco0
>>875
移行するメリットがないとねぇ
レコード数が少ないと速度なんてほとんど変わらないし…
100万レコードでも、きちんと作られてればAccessでも十分実用になるし…

まずは、めちゃ処理時間がかかるやつ一つを移行。ストアド作り込んで速くなるのを見せるとか。
せっかくSQLServer使うなら、ストアド使わないと勿体ない。ただレコード持ってるだけの箱になってしまう。
ストアドはとっつきにくいと思うが、レコードをこねくり回すような時間かかる処理には効果絶大。

逆に言うと、軽いデータや処理のmdbは移行後回し。(というより、そんなの移行しなくてよろしい。労力に見合わない)
0877デフォルトの名無しさん (ワッチョイ a701-rbBm)
垢版 |
2019/03/12(火) 22:41:48.72ID:aDT3+eco0
>>876
いきなりストアドで大規模ロジックを書こうとしても、どう書くべきか(どう書くのがふさわしいか)わからないと思う。
小ロジック大量レコード処理辺りから書いていきましょう
0881デフォルトの名無しさん (アウアウエー Saaa-/Er5)
垢版 |
2019/03/12(火) 23:43:55.90ID:hqmBJoBXa
Webシステムで全て開発側の手元にあるんならストアドなんか害悪しかないけど、
VBAだったらストアドやビューを最大限に活用して可能な限りDBMS側に寄せるべき
神VBAは作りっぱなしで逃げられるならいいけど、後々Excel側の変更やDB側のスキーマ変更で地獄を見ることになる
0882デフォルトの名無しさん (ワッチョイ de8c-4aR2)
垢版 |
2019/03/12(火) 23:46:34.37ID:hut6v0dp0
ExcelからAccessのデータを取得するきはこういうコードをクラス化してAccess立ち上げる必要ないようにした。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_030.html
他言語使ってる人の事情は知らんけど似たような感じだと思う。
SQLサーバ向けのもADOだからインターフェース変えずにできた。
せっかくツールったんだから移行しろよ!
と思ってたけどもう何がいいのかわからんくなった。
0887デフォルトの名無しさん (アウアウウー Sac3-cVal)
垢版 |
2019/03/13(水) 00:46:32.81ID:A37ahhw6a
>>884
インデックスが効かないとは言ってませんが?

SQLなら期待される結果を返す範囲で最適化して高速化する余地があります
これはSQLが宣言的な言語だからできることです
最終的な答えが同じなら途中の結合や絞り込みを入れ替えたり省略することが可能です

逆にストアドは手続き型なので基本的に定義した順に処理が逐次実行されます
全く最適化できないわけではありませんが宣言的な言語と比べるとこの順序があるという性質のせいで制約が強く最適化のかかりが弱くなります
0891デフォルトの名無しさん (ワッチョイ 1201-DUKr)
垢版 |
2019/03/13(水) 00:57:03.71ID:lH3YwFhl0
>>887
だからその逐次実行を行うのがクライアントなのかサーバーなのかが違うだけでしょ
そりゃストアドと単一のSQL比べたらストアドの方が遅いだろうけどクライアントが同様の処理すること思えば全体としては(ちゃんと設計されてりゃ)速くなるでしょ
0895デフォルトの名無しさん (アウアウウー Sac3-cVal)
垢版 |
2019/03/13(水) 01:32:35.47ID:A37ahhw6a
>>891
アプリケーションとストアドの比較をしているのではなく同じ結果をもたらすSQLとストアドの比較をして言った
そもそもアプリケーションに書かれたビジネスロジックをそのままストアドに移植する時点で論外なので比較する発想がなかった
0897デフォルトの名無しさん (アウアウウー Sac3-cVal)
垢版 |
2019/03/13(水) 06:19:07.90ID:A37ahhw6a
>>896
残念ながらありえます
しかも少なくありません
単にSQLが苦手な人
ストアドの方が速いと思ってる人
深く考えずアプリケーションコードストアドに移植してしまう人
SQLでいいのにストアドを書いてしまう人というのは何処にでも居ます
0902デフォルトの名無しさん (ワッチョイ 9290-uGU8)
垢版 |
2019/03/13(水) 10:36:45.92ID:4v7XhTis0
一体いつまで同じ話をぐだぐだ続けるつもり?
プログラマ板のどっか雑談スレでやれよ低能プログラマどもは
0904デフォルトの名無しさん (ワッチョイ 1201-ouaW)
垢版 |
2019/03/13(水) 15:18:57.45ID:6SLKDaoM0
セルA1に =aaa と書き込んで数式エラーを作っておきます

その上で
Dim ary() As Variant
ary = Activesheet.Range("A1:A10")

MsgBox ary(1, 1)

結果:
型が一致しません

ary(1, 1)をVariant型の変数に代入する場合は何も起きないので
MsgBoxに表示するときに内部的にString型に変換するため
エラーがおきるのだろうと思っています

それはともかく、ary(1, 1) からエラー値を削除したいのですが

ary(1, 1) = ""
MsgBox ary(1, 1)

とやってもダメでエラーが出ます
ary(1, 1) を何もない状態にするにはどうしたらいいですか?

ary(1, 1)はこの先いろいろな操作をすることになるため、そのたびに
どこに隠れているか分からない数式エラーをチェックするのは大変なのです
0907デフォルトの名無しさん (ワッチョイ 9212-UKFF)
垢版 |
2019/03/13(水) 15:26:27.13ID:YE/558h40
あー、荒れてるところ申し訳ないのですが、
ちょっと、質問…いいですかね…
初心者なんでさっぱり文が思いつかないから
例文みたいなのを作ってほしいんですけど…

B3:F○○の表があります。

・B3:F10にそれぞれセルに名前を付けていきたい。
・B3を「_0」としてC3「_2」というように、+2ずつ、
F3「_8」までいったらB4「_10」と同じように+2して、
最後のF10までやりたい。

こんな感じのってできますか??

他のシートでも同様の作業を行ないたくて、
B3から、F列の表で、数字が入力されている部分だけ名前をつけたいから、
if文とかで、数字が入力されていなかったら名前をつけるのを終わるみたいなできたら嬉しいです。
0909デフォルトの名無しさん (ワッチョイ 1e68-uGU8)
垢版 |
2019/03/13(水) 15:38:57.02ID:ril+FLd/0
>>907
先に範囲選択してからマクロ実行
セルに何も入ってない場合に終了(数字かどうかは判定していない)

Sub Macro1()

番号 = 0
For Each セル In Selection
If セル.Value = "" Then
Exit Sub
Else
ActiveWorkbook.Names.Add Name:="_" & 番号, RefersTo:="=" & セル.Address
番号 = 番号 + 2
End If
Next

End Sub
0910デフォルトの名無しさん (ワッチョイ 12e7-+lbj)
垢版 |
2019/03/13(水) 16:22:51.30ID:kv9h9xOp0
以前、ifの条件に合わない時に実行したい時はthenに続けてelseと書いて実行したい内容を書くよりも、条件をnotで括った方が処理が速いと言われました
実際に計測したら確かに僅かな差が有ったのですが何故なのでしょうか
0912デフォルトの名無しさん (アークセー Sxc7-sOih)
垢版 |
2019/03/13(水) 20:59:56.96ID:p9thMYjCx
>>910
Ifブロックは先頭の条件から逐次Boolean評価していって、一度Trueと判定されるとそこで条件を満たす場合の処理を実行し、残りの条件は評価しない仕組み
Elseのケースでの処理を実行するとなると、If条件とそれ以降のElseIf条件全てにおいてTrueが成立しないという条件が必要になる
なので、同じ条件数のIfブロックで比較すると、Elseより前に置かれた条件で処理を行わせる方がElse以降で処理させる場合よりも条件評価を行う回数が少なくなる
0913デフォルトの名無しさん (ワッチョイ 12e7-+lbj)
垢版 |
2019/03/13(水) 21:38:41.07ID:kv9h9xOp0
>>912
if not true then temp = 0
if true then else temp = 0
の二つのif文があった時、後者はtrueの評価の後にelseという評価をしてるという事でしょうか
0914デフォルトの名無しさん (オッペケ Src7-t9Np)
垢版 |
2019/03/13(水) 21:39:18.39ID:hyG2utnjr
>>912
VBAはショートサーキットしないけどな
0917デフォルトの名無しさん (ワッチョイ eb5c-Ly0m)
垢版 |
2019/03/13(水) 21:53:50.43ID:Blqbf86O0
はっきりさせておきたい
VBAのとき、
if A and B and C then

ってなってるとき、A、B、C全部必ずチェックするのか、AがFALSEだったら、もうB、Cは無視するのか
どっち?
C言語みたいに、& と && みたいなandに2種類ないよね
0922デフォルトの名無しさん (ワッチョイ f2bc-E/ds)
垢版 |
2019/03/13(水) 22:41:50.24ID:MTZmUGDO0
不慣れな初心者ですみません

リストシートのボタンを押すと
リストに入力していたデータ行数分書類型シートが作られるのですが
その作られた書類型シートにもそれぞれボタンがあり
各ボタンを押すとデータ送信用シートが作られる二段構造?になっています

書類シートからデータ送信用シートを作るには
いちいち各シートのボタンを1つずつ押さねばならず大変です
選択したシートのボタンを一括で押すことのできるマクロはありませんでしょうか…?

本当はリストからボタン1つで書類シートとデータ送信用シートができれば最高なのですが
そこまでの改変は難しそうで…
0925デフォルトの名無しさん (ワッチョイ a37c-DZHv)
垢版 |
2019/03/13(水) 22:53:39.78ID:TdaaOBVz0
ごめん>>923は内容勘違いなので忘れて
一括で送信シート作るボタンを一つ作ってその中に、

forで選択した書類シート分回す
 その書類シート内の送信シートを作るボタンClickを呼ぶ
Next

ってのはどうですか
0929デフォルトの名無しさん (ワッチョイ a301-89K6)
垢版 |
2019/03/14(木) 01:04:48.38ID:D/xLb5AQ0
ピボットテーブルの集計結果使いたい時って今まで計算用シートで作成→せる決め打ちで取得 てやってたんだけど稀にカラムずれる
こういうのvbaだけで計算する関数とかないよね?
0931デフォルトの名無しさん (ワッチョイ ff7c-YxN5)
垢版 |
2019/03/14(木) 04:24:36.89ID:ci+9chmP0
>>922
現物見てないからよくわからないんだけど、
リストシートや書類シートにボタンがついてるってのは
マクロ有効ブックの中にそれらのシートがあるってこと?

出来ればデータとマクロは別のブックに分離しといたほうが良いんじゃないかな。
そういう作りにしてれば改修も簡単になりそう。
0932デフォルトの名無しさん (スプッッ Sd1f-TAcj)
垢版 |
2019/03/14(木) 08:13:54.22ID:YBKQY7Hwd
>>927
普通に
If A Then
If B Tnen
If C Then
A And B And Cの時の処理
EndIf
EndIf
EndIf
とするかな。

でも、これでの速度アップより、他に速度ダウン要因を減らした方が良さそう。
自分はIf A AndB And C Thenを気にせず使うな。
0940デフォルトの名無しさん (スプッッ Sd1f-TAcj)
垢版 |
2019/03/14(木) 12:36:06.81ID:YBKQY7Hwd
>>933
それは別の問題だよ。
そういう場合は最初からIf A And B And C Thenなんてやらない。

Bの評価でエラーが出ない時でも必ずBの評価をすることで速度ダウンするのを防ぐために
If A Then
If B Then
EndIf
EndIf
とするかと言えば、普段はやらないということ。

それで得られる速度アップより他の修正をした方がよっぽど効果有るだろ。
0945デフォルトの名無しさん (ワッチョイ 13ce-B/CD)
垢版 |
2019/03/14(木) 15:13:23.25ID:ONwCUS8k0
ショートサーキットが活きてくるのは、Boolean型の関数を並べるときだな
If Func1() Or Func2() Then
みたいなケースだと実行時間がかなり違ってくることも起こりうる
0950デフォルトの名無しさん (スプッッ Sd1f-TAcj)
垢版 |
2019/03/14(木) 19:58:36.19ID:YBKQY7Hwd
>>949
バーカw

短絡評価云々についてはネストすると言ってる。
でも普段は速度を気にしないからネストしないと言ってる。

ここでの速度の話はついでの話だ。
ついでの話で速度を蒸し返したのは俺が最初で、別に>>917が速度のことを考えていなくても何も問題ない。
ついでを書かないと、どんな時も俺がネストしてると思われるから書いてるんだ。
>>917が速度のことを気にしてると俺が思ったからでは無い。

このついでに反応した>>933は「俺が最初に蒸し返した」のでは無く、「俺が>>917を勘違いした」と思ったんだろう。
0953名無し (アウアウウー Sae7-9Z9t)
垢版 |
2019/03/14(木) 20:51:32.45ID:qOCswbNsa
のび太 ドラえもん、なんか道具出してよ
ドラえもん まーまー棒、 ――――◯
0955デフォルトの名無しさん (オッペケ Sr07-89qL)
垢版 |
2019/03/14(木) 22:26:04.50ID:aAmaHeQqr
マクロというものを知ったばかりです
■リストから単票を印刷する
http://www.aibsc.jp/nsj/03_07_it/090201_01/index.shtml
というマクロを使い注文書を作りたいと思っています
このマクロだとリストに同会社がある場合
同会社がある分だけ印刷されてしまいます
同会社の場合は注文をまとめたいのですが
どういうマクロを組めばいいのでしょうか?
お力を貸して頂きたいです

リスト
https://i.imgur.com/B7EAyhw.png

理想
印刷1枚目
https://i.imgur.com/s4Lbrxu.png
2枚目
https://i.imgur.com/zKOwgMq.png
0960デフォルトの名無しさん (ワッチョイ cfda-kdx8)
垢版 |
2019/03/14(木) 23:25:05.84ID:KDf9lyPv0
>>955
何だそれwwwww
印刷画面にIndex関数を埋め込んでおけば、
5行くらいで書けるんじゃないのwwwww

で、まとめる方法だけど、やっぱAccessを勧めるな。
Excelでも出来るけど、餅は餅屋だとわかる方がいい。
0962デフォルトの名無しさん (ワッチョイ 6f68-B/CD)
垢版 |
2019/03/14(木) 23:32:27.61ID:Cgb2oqJn0
>>955
accessって意見が多いけど、俺はvbaでやるかな

・まずまとめるシートを新しく作る。一社一行
・それを今まで通り印刷していく
が主な流れと思う

作業自体は難しくないが、仕様が複雑怪奇である

・納期はどこからどこまでか?最短?最長?平均?
・数量もどうまとめるのか?
・品番はどう表記するの?
など、山程考える事がある
0963デフォルトの名無しさん (ワッチョイ cfda-kdx8)
垢版 |
2019/03/14(木) 23:32:30.81ID:KDf9lyPv0
ていうか2009年って。
書いた本人も、内心消したいと思ってるんじゃないのそれ。
当時は良くても、10年後にActiveCell.Offset(1, 0).Selectとか見たら、
あちゃー(ノ∀`)だと思う。
0967デフォルトの名無しさん (ワッチョイ cfda-kdx8)
垢版 |
2019/03/14(木) 23:50:37.23ID:KDf9lyPv0
ん、ちょっと待った。
注文書を印刷?
今時そんなことやったら、受け取る方は嫌がると思う。
どうしても紙にするなら、
見た目の格好良さなんか度外視で、
QRコード・品名・数量・納期を、ただ羅列するだけの方がいいよ。
パソコンなんか使ってないような、クソ田舎の店に注文出すわけじゃないんでしょ?
0968デフォルトの名無しさん (ワッチョイ 737c-13+i)
垢版 |
2019/03/14(木) 23:59:36.30ID:39aguKNH0
>>955
できるだけ単純な方法だと、
・リストにマクロ用の作業列を1列用意する
・マクロ開始時に作業列をクリア
・ループ内で印刷シートにデータを入れ込む前に、その行の作業列が空白かどうか見る
 空白なら印刷シートに社名とデータ入れて、作業列に1とか適当に入れる
 FindとFineNextで同じ社名全部検索して、1個目と同じように見つかった行の作業列に何か入れてデータを印刷シートに入れる
・印刷実行
0971デフォルトの名無しさん (ワッチョイ 6f68-B/CD)
垢版 |
2019/03/15(金) 00:02:04.33ID:5fRBFExt0
批判とかする気持ちは分かるけど、だったらダイマ批判の覚悟でそれ相応のサービスを紹介してあげてはどうかな
さすがにそろそろvbaで請求関係は終焉させてあげたい。よく20年も頑張ったよ
0974デフォルトの名無しさん (スプッッ Sd1f-TAcj)
垢版 |
2019/03/15(金) 08:35:06.36ID:8vQK+5mFd
>>955
業務の内容から考えるとAccessのが良いっぽいんだけど、規模によるかな。
注文する会社はどれくらいあって、この注文書ってどれくらい印刷するのか。

そもそもDBにするような話なら既にそうなってる気もするんだよな。
だからExcelでDBにもしなくて良いような気がする。

>>963
全く同意だけど、記事の内容を見ると初めてVBAを触る人向け第2回って感じだから、マクロ記録をちょっとだけ改変って感じなんじゃない?
0977デフォルトの名無しさん (ワッチョイ 6f8c-z/E1)
垢版 |
2019/03/15(金) 08:53:15.07ID:mu0sfa7H0
>>970に書いたのは冗談じゃなくて、データは専用の別ブックに置くようにして、マクロ(と印刷用画面)と分けた方がいい。
データブックからの読み取りはSQLでやる。
こうすれば将来のDB化にも繋がるよ。
0986デフォルトの名無しさん (ワッチョイ ff12-TJP/)
垢版 |
2019/03/15(金) 18:22:20.40ID:jUtd0ALV0
この前、セルに _(数字)の名前を付けたものです。
(数字)は変数として定義してあるのですが、
アンダーバーが使えないため、_(数字)を参照できません。

なんで新たに、Sujl、みたいな変数の箱を作って

Suji = "_" & (数字)

っていうのにしてみたんですけど
セルにSujiを入力するようにすると、_2のように表示されるのですが
Range(Suji).Select
だとエラーが出てしまいます。

どうやったらその名前を付けたセルを参照できますか??
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 34日 5時間 42分 33秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況