X

Excel VBA 質問スレ Part59

レス数が1000を超えています。これ以上書き込みはできません。
2019/02/09(土) 15:12:30.70ID:3lTArmdf0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part58
https://mevius.5ch.net/test/read.cgi/tech/1542577644/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/02/09(土) 15:22:25.15ID:8WZyJ5B/0
ただし、VBAが何かわからないような馬鹿はお断りです
2019/02/09(土) 15:40:14.54ID:CKZ2Rs4GM
他の言語スレでは相手にされずここならマウント取れるだろうとやって来る馬鹿もお断りです
2019/02/09(土) 17:15:55.60ID:Z3yo63+mM
>>3
マウント取られちゃう怯えですか
5デフォルトの名無しさん (ワッチョイ 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 & このプロシージャ名
に変更したくなりました。
「このプロシージャ名」を書く方法ってあるのでしょうか?
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()
これを使うんですよね?
2019/02/09(土) 22:30:32.98ID:nXE2v5Lv0
そうやって作ったのって、やっぱ実行速度はC#並みになるのかな。
VBAレベルに落ちちゃうなら、VBAに翻訳しちゃうとか。
2019/02/09(土) 22:39:52.86ID:M8bBhNwV0
エクセルvba勉強始めてるんですけど
言語がなんかすきになれないです
オブジェクトを生成してそれを操作するってのばっかりにみえるんですが
それならいっそパイソンやら使いやすい言語でcomオブジェクトからエクセルを操作したほうがいいんでしょうか?
2019/02/10(日) 00:05:20.18ID:cpoaXViK0
要望2だけ反映させてました
https://www.axfc.net/u/3958630
変更点
乱数はマイナスも作成できるようになりました
文字シャッフル機能を追加しました
ケンブリッジのあれも取り入れてみました

要望1はいいと言うことなのでこれで終わりたいと思います。
スレ汚し失礼しました。
2019/02/10(日) 03:10:28.77ID:T8b1EA5w0
>>5
無かったと思うな…
あるとしても ThisModuleな感じか…
2019/02/10(日) 03:26:25.40ID:5I+kynYZ0
>>8
別の言語でエクセルの操作はおすすめできない
やるならワークブック/ワークシートオブジェクトなどを操作した方がいい
オブジェクトを操作するだけならわざわざ高いOfficeも買わなくていいし
2019/02/10(日) 03:36:45.00ID:cpoaXViK0
デバッグしてたらとまりませんね・・・
何個かバグつぶしたので上げなおします
https://www.axfc.net/u/3958695
13デフォルトの名無しさん (アウアウクー MM91-eF01)
垢版 |
2019/02/10(日) 08:29:51.15ID:nwYV/fdtM
なんかすみませんね。深夜睡眠をけずってまでやってらったようで、、。ツールありがとうございます。
あとはこちらでいただいたツールをベースに必要に応じてカスタマイズします。
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ならいろいろあるようですが
2019/02/10(日) 09:40:27.91ID:7rlN1EyT0
>>14
そこだけVBSにするとか。
2019/02/10(日) 09:54:47.81ID:px4mCHlG0
>>14
JScriptは良くわからんが・・Javaは結構したけど
見当違いなら申し訳ないが
既にExcelが起動していて、シート1が選択され
範囲が選択されている状況で、JScriptを動かしているんで良いですよね
2019/02/10(日) 10:14:14.92ID:px4mCHlG0
>>5
単にプロシージャ名の変数を宣言しておき
各プロシージャ実行時にプロシージャ名に名前をセットして実行
エラー表示でプロシージャ名の変数を表示するだけでは
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;

でいけるんじゃないかな
試してないから間違ってたらごめん
2019/02/10(日) 10:48:51.96ID:px4mCHlG0
>>8
昔は、メモリーの領域を分け合って使ってたけど
いまわ全てオブジェクトと思え
エクセルは色々このオブジェクトの使い方が説明されていて
機能も多い
いやならすべて作ればとなるが、所詮何も出来ないだろ
2019/02/10(日) 10:52:53.82ID:px4mCHlG0
>>17
これは間違いだな、サブルーチンから戻った時を考えてない
サブルーチンでは、元の名前を保存しておき元に戻す処理が必要になるが
こんなの今時やらないな
2019/02/10(日) 10:57:18.71ID:px4mCHlG0
したがって、プロシージャ名は配列で宣言し、サブルーチンの時の処理が必要になるが
これは、システムが管理しているのを使うべきだな、すまない
2019/02/10(日) 11:29:32.47ID:adWOvpgi0
>>18
ありがとうございます!

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

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

具体的には、今回はSelectionへのアクセス方法がおかしかったわけで、
MSDNリファレンスのプロパティ一覧を見たり、VBEのオブジェクトブラウザでプロパティを検索したりすれば、
Worksheetオブジェクトには現在の選択範囲へのアクセスを提供するSelectionプロパティがないことや、
SelectionプロパティはApplicationオブジェクトのメンバとして実装されていることが分かる
2019/02/10(日) 12:45:32.26ID:7rlN1EyT0
>>22
無理に移るんじゃなくて、併用するとか。
2019/02/10(日) 12:48:09.50ID:px4mCHlG0
前スレでもあったが、シートを選択してなければ、そのシートの選択範囲は取れない
ただそれだけだろ
2019/02/10(日) 12:56:37.91ID:YUFMtInCx
>>26
元の質問のサンプルはsheet.Selectionという式の構文が間違っているので、仮にシートを選択していようが選択範囲は取れない
あと、シート上のSelectionの情報を取るだけなら画面遷移を伴うSelectではなくActivateで十分だろう
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
2019/02/10(日) 13:03:50.84ID:px4mCHlG0
>>27
すまないな
>シート上のSelectionの情報を取るだけなら画面遷移を伴うSelectではなくActivateで十分
実質的にどう違うかわからないので申し訳ありませんが教えていただけませんか
2019/02/10(日) 13:14:52.82ID:YUFMtInCx
>>29
Selectによる画面遷移はユーザーとの対話を想定した処理で、当然描画処理の負荷がかかる
プログラム上で参照するアクティブなオブジェクトを切り替えるだけならSelectはしなくて良い
2019/02/10(日) 13:26:46.13ID:BFbUXkOH0
>>28
>>Set x = selected.Row ' ここでエラー

x = Selected.Row
2019/02/10(日) 13:31:40.65ID:adWOvpgi0
>>31
出来た。 なんだかなあ、、、w
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
と一旦とってからの方がやりやすいですね。ありがとうございました
2019/02/10(日) 15:20:48.09ID:adWOvpgi0
>>30
jsで、Activateでやってみましたが、ワークシートも切り替わってますよ
Selectとの違いがわかりません
vbsではやってません
2019/02/10(日) 15:55:33.83ID:hManQYIw0
>>34
スレチだ
いい加減にしろ、死ねよ
2019/02/10(日) 16:05:34.34ID:ZjJO7g3i0
>>6
だれかこれ分かる人おらん?
2019/02/10(日) 16:25:54.76ID:vOpxNkmL0
>>36
直接は呼べなくてCOM経由でしか呼べない
VBA C# dll 呼び出し
とかでググれ
2019/02/10(日) 18:24:50.29ID:kyKghR0l0
C#わからんから無責任発言するけどC++でdll作りゃ問題ないならそうすれば?
2019/02/10(日) 18:46:31.86ID:96GWWqq3M
C++で橋渡しするならC++/CLIでできるね
でもそんな面倒なことをするより普通にexe作るかpowershell書くかして別プロセスとして呼べばいいよ
データの受け渡しはコマンドライン引数なり標準入出力なりを使えばよい
2019/02/10(日) 19:52:43.32ID:vOpxNkmL0
なんでより面倒な方法をドヤ顔で書いてるんだよ w
C#で書いてちゃんと設定すりゃインテリセンスも効くというのにコマンドラインとかありえねー
2019/02/10(日) 20:43:54.86ID:fHWqGmK3a
>>36
わかるけどスマホからサンプルコード書くのはしんどいわ
C# ComVisible Excelあたりでググって
2019/02/10(日) 21:28:15.49ID:kyKghR0l0
>>39
自分でC++dll書けるなら呼び出す側はかなり簡便になるように作れるよ
なによりワークシートの大量データを配列で丸ごと渡せるからね。
コマンドラインじゃ無理でしょ
2019/02/11(月) 02:36:20.89ID:QZQ3TitU0
>>5
はるか昔に似たようなことやろうとしたが断念して↓で落ち着いた

MsgBox "Err." & err.Number & " " & err.Description, vbCritical, "モジュール名"
2019/02/11(月) 14:06:13.76ID:2OxsMAwm0
>>37
やっぱ直接は無理か。管理者権限とかCOM経由しか無理なら諦めます。
2019/02/11(月) 14:07:58.69ID:2OxsMAwm0
>>41
直接は無理そうなんで諦めます。
46デフォルトの名無しさん (JP 0H16-KbRv)
垢版 |
2019/02/11(月) 15:17:21.04ID:PhhkhwtYH
>>5
CodeModuleプロパティでなんかできそうだけど使ったことないからわかんね
2019/02/11(月) 17:58:03.71ID:fFRcOW+J0
エクセルのシートやセルのオブジェクトにどんなメソッドやプロパティがあるのか見れるところないですか
48デフォルトの名無しさん (アウウィフ FF05-DOJB)
垢版 |
2019/02/11(月) 18:04:33.43ID:itY+kGJRF
https://docs.microsoft.com/ja-jp/office/vba/access/concepts/settings/set-references-to-type-libraries
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/can-t-find-project-or-library
49デフォルトの名無しさん (ワッチョイ dd0b-VUEs)
垢版 |
2019/02/11(月) 18:43:45.66ID:fA09NaPq0
>>12
のダウンロードした回数多くないか?
有用なツールだと認められた証だろう。作った人は自慢していいよ
2019/02/11(月) 18:49:07.13ID:TpVFRub80
>>49
ん? これ、何のファイル?
2019/02/11(月) 22:38:05.08ID:9CUrx5/r0
このスレの人ってやっぱりプログラマーが多いんですか?
それなりにVBA使えるようになった事務職なんですが、転職を考えています
想像してはいたんですが、VBAで職探しするとプログラマーばっかりですね

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

YouTube にも、そういう成功した人たちの動画がある
2019/02/11(月) 23:54:44.08ID:9CUrx5/r0
>>52
経理財務畑で10年働いてるので、その補佐としてVBA使ってる現状です
VBA楽しいので、そればっかりの仕事はしたくないんです
たぶん嫌になっちゃうので。
なのでIT業界に行きたいわけじゃないんです

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

できました!
2019/02/12(火) 01:54:53.42ID:w+cVMhLi0
>>60
なんかシンメトリーできれい
2019/02/12(火) 04:41:36.02ID:afakhEje0
>>57
VB6 と同じ程度なのでは?
63デフォルトの名無しさん (アウアウエー Sa0a-DOJB)
垢版 |
2019/02/12(火) 07:32:55.78ID:SvKCMiwAa
>>60
エラー処理(例外処理)が緩すぎる
やり直し
2019/02/12(火) 08:01:42.96ID:yCgE5JHqM
>>56
仕事を効率化するシステムはある程度自分で作るのが当たり前の時代が来る(かもしれない)から
IT業界でなくてもプログラミングは必須になる(かも略
ただしそのツールの主流はVBAじゃないだろうね
いろんなツールや他言語も覚えて他人の仕事をどんどん奪ってください。
そうすれば時代の流れを加速することになるのでヒーローになれます。
65デフォルトの名無しさん (ワッチョイ fe7c-SgG7)
垢版 |
2019/02/12(火) 11:26:12.35ID:8lolhehX0
MSがExcelにPython載せるっつってたから
君が卒業して社会に出る頃にはVBAは消えてるかも知れない
2019/02/12(火) 13:55:06.88ID:w218beJOM
>>64
まず型はいらない。
コマンドや関数はフローチャートの図形みたいな視覚化とパラメータで作成。
論理エラー以外のエラーは出ない仕組み。
やろうとすればいくらでもできるんじゃね?
2019/02/12(火) 13:56:32.19ID:vLhvVMgO0
>>65
馬鹿は嘘情報を検証もなく信じる
2019/02/12(火) 14:29:27.10ID:yCgE5JHqM
>>66
そんな軟弱な
それじゃ小学生向けのプログラミング教室と変わらないじゃん
2019/02/12(火) 14:34:04.56ID:yiYRNC81M
>>66
まんまRPAじゃね
2019/02/12(火) 14:40:47.72ID:CHFilx2O0
https://www.publickey1.jp/blog/17/excelpython.html
2019/02/12(火) 15:57:24.73ID:gVOhdcQpM
>>68
一般の個人がやるならこのくらいが普通。
HTML手書きの敷居を下げたホームページビルダーだってそうだろ。
プログラムがCUIっていうのに違和感を持つべきだと思う。
2019/02/12(火) 16:00:06.68ID:gVOhdcQpM
>>69
そそ、それをより深くしてさらに汎用化させた感じ
2019/02/12(火) 18:57:41.03ID:WG+Lzv660
>>66
やろうとすればというかもうとっくに先人たちが取り組んで諦めた分野だよ
学生の頃に配線型のプログラミング言語を使ったことあるけど難しすぎて習得を諦めた
2019/02/12(火) 19:46:07.38ID:u96ReIy/0
先人たちの時代には難しかっただろう
しかし今のPC環境ならグラフィカルなプログラミングも実用化できるんじゃね
2019/02/12(火) 19:49:06.70ID:gxc4B4g80
>>13さんもう見てないかな
自分で使ってみたけどなんか違う・・・と思って考えてみたら
問題のシャッフル出題(各問1回だけシャッフルして出題)が足りないという結論に
バグもつぶしたし、まだ見てるならレスください
76デフォルトの名無しさん (ササクッテロル 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.
になおす。

要は、中途半端な改行がある文を、一行にまとめる。
2019/02/12(火) 21:11:53.35ID:yCgE5JHqM
>>74
みんなそんなに全力でテキストベースのプログラミングを避けたいのかねえ?
使いこなせば強力な武器になるとは思わんのか?
2019/02/12(火) 21:30:27.20ID:u96ReIy/0
>>76
改行をなくすだけなら比較的簡単にできる
適切な位置で改行しろってなら、適切な位置を事前に完全に定義すればまぁできる

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

仕事で、大量の英文を整理したいので困ってます。
2019/02/12(火) 22:00:43.06ID:1aNudvIBa
線つなぐやつはサブルーチンが正体不明のアイコンになるからものすごくわかりにくい
逆にわかりやすいプログラムを描くには高度なアイコンデザインセンスが必要ということだ
そんなの天才にしか使いこなせない
2019/02/12(火) 22:17:01.28ID:qNrXOr6p0
>>82
もうVBA関係なくなっちゃうけど、普通のエディタ使って置換機能を使えばいいだけでは。
85デフォルトの名無しさん (アウアウクー MM91-q7hS)
垢版 |
2019/02/12(火) 22:41:31.90ID:CcMjC8kpM
>>84
セル内の文字列を対象にしてると思うからエディタでは無理では?分からないから適当に言うんだけど。
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
87デフォルトの名無しさん (ワッチョイ 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
88デフォルトの名無しさん (アウアウクー MM91-q7hS)
垢版 |
2019/02/12(火) 23:44:44.19ID:CcMjC8kpM
>>75
最新版は5ですよね?使ってみましたがオブジェクトエラーが起きてどこで停止しているかみてみると、ソート処理時に停止する。

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

やりていことこ実現できているので満足です
2019/02/12(火) 23:58:53.49ID:gxc4B4g80
そうでしたか、なんかすみません
じゃ本当に終わります。
2019/02/13(水) 02:27:50.55ID:NEpE3zFw0
Python などの形態素解析で、文末でも判定すれば?
91デフォルトの名無しさん (ワッチョイ e101-P0T6)
垢版 |
2019/02/13(水) 06:35:13.37ID:9485a3fT0
>>84
例えば?メモ帳とか?

改行を無くす置換はありますか?
2019/02/13(水) 07:12:30.92ID:i20vW39tM
>>82
改行置換ならVBAも要らん
https://excelkamiwaza.com/excel_kaigyou_tikan.html
93デフォルトの名無しさん (ワッチョイ f901-P0T6)
垢版 |
2019/02/13(水) 07:30:01.13ID:AhLCWHg20
>>92
ありがとうございます。一つのセルに最大どんだけテキスト貼れるかですね
94デフォルトの名無しさん (ワッチョイ f901-P0T6)
垢版 |
2019/02/13(水) 07:36:07.18ID:QsqoJnTp0
>>92
cntl+jか。知らなかった。ほかのワードとかでも使えるかな
2019/02/13(水) 07:44:47.38ID:zGo41KJe0
セルを指定する時とか”A1”とかちまちま書くのが普通?
めんどくさいんだけどそんなもの?
96デフォルトの名無しさん (JP 0H16-KbRv)
垢版 |
2019/02/13(水) 08:07:53.15ID:kNKWDOP4H
>>95
ヘッダの話なら1個ずつ書いてくしかない
2019/02/13(水) 08:46:40.27ID:LdPPLa0i0
>>95
状況とやりたいことによる
範囲指定する書き方も出来るし、変数で楽できる場合もある
2019/02/13(水) 08:48:18.23ID:LdPPLa0i0
>>93
Excelと関係ない英文を整形したいだけならテキストエディタを使った方が早いぞ
せめてWordにしとけ
2019/02/13(水) 09:17:10.81ID:s1ZD6WV/0
「何の条件」で「何を」「どのようにしたいか」の中で「何の条件で」が出てないな
「何を」「どのようにしたいか」も一部の条件しか出てない気がする
連想ゲームじゃないんだから質問はちゃんとかけよ
2019/02/13(水) 10:05:00.38ID:s1ZD6WV/0
>>76
この質問は
Excelの枠に配置で、折り返して全体を表示するに
以下の改行のない文を貼り付けた時に
How are you? I’m looking forward to see you.
セルの幅に合う位置で改行されるのを思いの位置で改行したい
ってことだろ、思いの位置が明文化されないとな
例えば英文であるかわからんが「...」みたいな文とか「!!」みたいなとかもありそうだしな
101デフォルトの名無しさん (JP 0H16-KbRv)
垢版 |
2019/02/13(水) 10:59:06.69ID:kNKWDOP4H
>>95
あと以下のようにしておくと面倒でなくなるよ

cns_COL_ID = “A”
Range(cns_COL_ID & 1) = “ID”
2019/02/13(水) 11:08:47.69ID:s1ZD6WV/0
>>95
貼り付けられたイベントで処理するのも普通だけどな
位置は分かるから、そのセル・レンジを処理する
2019/02/13(水) 11:41:27.51ID:s1ZD6WV/0
Private Sub Worksheet_Change(ByVal Target As Range)
まあ、Changeイベントで
 If Application.CutCopyMode = xlCopy Then
 End if
コピーされた場合「Range」に対して処理を書くんだな
2019/02/13(水) 14:06:51.14ID:cLVWJ/NN0
セル上でドラッグドロップしたら、それでプログラムが動くようなことってできますか
たとえば、縦1列に20個のデータが入っていて、その1つを別の場所に
ドラッグドロップすると順番が入れ替わるようにするとか
105デフォルトの名無しさん (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
2019/02/13(水) 14:36:01.74ID:cLVWJ/NN0
>>105
出来るんですね。 ありがとう
107デフォルトの名無しさん (JP 0H16-KbRv)
垢版 |
2019/02/13(水) 14:45:16.60ID:kNKWDOP4H
>>106
あとApplication.Enableevents = Falseしないと配列をセルに書く時にWorksheet_changeが起きて無限ループするから気を付けて
2019/02/13(水) 14:45:50.22ID:s1ZD6WV/0
>>104
それって、切取りと切り取ったセルの挿入のことじゃない
2019/02/13(水) 18:05:52.67ID:YjEmAg3Q0
>>104
シフト押しながらドラッグするだけやろ。

テーブル定義ならシフトすら必要ない。

既存の機能を自力で作ってどうするんや
110デフォルトの名無しさん (ササクッテロル Spd1-P0T6)
垢版 |
2019/02/13(水) 19:29:04.53ID:yofO24jUp
>>94
置換前にcntl+jと入れると、置換ボタンが押せない。
2019/02/13(水) 19:30:45.49ID:JQT8xzoY0
検索で正規表現を使えないというのもあれだな。
2019/02/13(水) 20:11:24.50ID:1az0o1MYM
ワードラップの問題だろ改行関係ない
2019/02/13(水) 20:17:10.65ID:zGo41KJe0
>>96>>97>>101>>102
ありがとう
>>101
これはなぜ楽になるの?
114デフォルトの名無しさん (ワッチョイ f901-KbRv)
垢版 |
2019/02/13(水) 20:39:49.89ID:9c/UwGiq0
>>113
楽というかマナー
意味の分かる定数で定義することで他人がプログラムを追わなくても理解できるようになる
2019/02/13(水) 20:49:54.38ID:9vYYaAAUa
プロパティ使ったほうが定数よりずっとわかりやすいよ
2019/02/13(水) 20:50:53.76ID:Hdk7qA5y0
決まりきったセル(範囲)参照する時は名前定義なりテーブル化した方がいいと思うけどな
117デフォルトの名無しさん (オイコラミネオ MM16-duX/)
垢版 |
2019/02/13(水) 20:54:23.96ID:vtryBqN5M
vba初心者です。
マウスイベントやスリープなどのapi を使って
会社で使うツールを半自動化してますが、
こういうアナログな方法ではなく、
マウスでクリックしなくてもツールがアクティブになったり、
スリープではなく画面が遷移したのを読み取って次の命令を実行してくれるような
ものを作るにはどういう学問を学べばいいですか?
2019/02/13(水) 20:57:56.29ID:zGo41KJe0
>>114
あり
2019/02/13(水) 21:14:49.27ID:0iV7VQWH0
ウインドウズのイベントをフックする
2019/02/13(水) 21:25:30.47ID:Hdk7qA5y0
>>117
UI Automation
ただ色々アレで結局Win32API併用することになることが多いけど
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
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を作ってみろよ
尚、理解できてないことが丸わかり
2019/02/14(木) 12:07:22.70ID:xvzsmsEPM
(´;ω;`)イベントが起こらなくなりました
2019/02/14(木) 12:08:59.63ID:FmdtC3Uo0
>>123
エクセル再起動しろ
2019/02/14(木) 12:20:00.82ID:oxBa5+ju0
>>123
まあ、間違ってるんだろそれだけ
ソースを出さなきゃ何もないよ
イベント鳥杉ってよくあるからな
有効な手段は、護摩をたけ、できるだけ激しく火事には気を付けろ
2019/02/14(木) 13:20:00.69ID:chn4JYyT0
たとえば、A1からC50までデータがあってA列をキーにソートしたいのですが、
途中たとえば、10行、15行、20−25行は抜かしたいのです。 これらにはコメントや他のものが入ってるので
でもそれらを抜かして全体でソートしたいのですが、Unionで繋いでやったら複数のレンジは出来ないみたいな
エラーを返されました
何かいい方法はないでしょうか
2019/02/14(木) 13:50:43.73ID:chn4JYyT0
例えば、画面表示は止めて、メモリ上で行を移動させてソートする行をまとめてからソートして、
また行をもとに移動させてから、画面上に結果を表示とか、出来ると可能性があると思うのですが
128デフォルトの名無しさん (ワッチョイ ff6f-dKms)
垢版 |
2019/02/14(木) 14:23:28.89ID:sSBdRoDO0
>>126
if i = 対象行 then
行入替え
end if
とかでいいんじゃね?
2019/02/14(木) 16:52:27.07ID:PSNlkVOrM
>>126
行を非表示にしたら対象から外してくれんかな…(試してない)
2019/02/14(木) 17:20:39.55ID:L4IMpAFUM
>>121

〇 自分で任意に付ける関数名
□ dllがエクスポートしている関数名
131デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/14(木) 17:59:11.87ID:bFGkVmlp0
dllってよくわかんないだけどvbsのexecuteglobalみたいな感じ?
2019/02/14(木) 19:55:09.02ID:chn4JYyT0
>>129
マジかあ。  やってみた。 出来てる

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

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

ひとつずつ、ァをアに変換、ィをイに変換、のように書くしかありませんか?
まとめて書く方法ってあるのでしょうか?
2019/02/15(金) 01:15:28.74ID:BkaZ3+610
Ruby のNKF とか、文字列.tr とか、正規表現とか
2019/02/15(金) 01:18:13.72ID:vhn0rFgQ0
60項目7万件のjsonデータ読んで保存した。
開いたらモジュールとフォームが破損って何なんだよ。うう吐きそうだ。
10Gじゃメモリたりなかったのか?いや、それならそうメッセージがでるはず。
まさかこんなんでコード飛ぶとは思わなかったからバックアップは取ってない。
10分おきの自動バックアップのデータはあったけどデータ取るのに2日かかったからとっくに消えてる。
もう作る気おきない。
参った。
2019/02/15(金) 01:20:07.21ID:vhn0rFgQ0
>>135
文字コードを差分だけ加算すればいい。
2019/02/15(金) 01:21:08.10ID:EWf/hEPba
>>137
ざまあ
そういうのはCSVを介するのが定石だろう
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


動くかわからんけどお試しあれ。
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
2019/02/15(金) 01:38:16.76ID:6R3QhjK00
一部の文字列関数が、なぜか5ちゃんねる全体のNGワードになってるんで、わざとスペースを入れてある
2019/02/15(金) 01:38:19.40ID:BkaZ3+610
Ruby では、

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

puts str.tr( "ァィゥェォャュョッ", "アイウエオヤユヨツ" )
#=> アイウエオヤユヨツあ
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
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
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
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
2019/02/15(金) 09:21:30.82ID:U9ClSHCYM
>>147
横レスだけど
他の言語に比べかったるいけどおいておいて
変換に使う文字列または配列はfunctionの外
変数はアドレス渡し function内で文字列を書き換え
変更が有った場合 true なかった場合false
使い勝手と動作速度を優先する
とスマホで書いてみる
2019/02/15(金) 09:40:41.96ID:GIzZTHxJM
>>147
たしかにs1を書き換えつつまたそれを返すというのは無駄だ。
ByValで受けて書き換えた結果を返すかByRefのままでSubにするかだと思う。
Booleanで返すのは今時の趣味には合わないんじゃないかな。
2019/02/15(金) 09:58:15.95ID:FxoJIoi60
>>149
セルを書き換えるべきか書き換えないかの判断をする
全てのセルの書き換えは時間もかかるし、空白のセルもある
必要ないデータは書き換えないでいいようにする

if kanacaps(s1) then cells(i,j) = s1
のように
2019/02/15(金) 11:36:22.43ID:GIzZTHxJM
>>150
s1自体は As Stringだろ
元の質問もワークシート関係ない話のように見受けられる
2019/02/15(金) 11:44:10.23ID:FxoJIoi60
>>151
だったら、このスレ関係ないな本当にそう思うのか?
自分の主張じゃなく要求者の状況を読まなければ意味ない
150の書き方でならシート全てを変換するfunctionも簡単にできるけど
お題を読めないのは厳しいな
2019/02/15(金) 11:49:05.00ID:6R3QhjK00
データ量と出現頻度と、呼び出し側でのデータの持ち方がわからない限り、最適解は出せないと思う
用途はなんだろう?半角カナが通るのにカナ小文字が使えないシステムなんて、大昔のオンラインシステムぐらいしか思い付かんけど
2019/02/15(金) 11:56:15.89ID:FxoJIoi60
>>153
今更聞いてる処がどうなの?
こんなのどっちでも簡単なのに、私は書かないけどなポリシーです
2019/02/15(金) 11:59:50.72ID:GIzZTHxJM
>>152
データソースがRangeであるか否かに関わらずs1は As String相当 だろう。
件の関数が何を返すべきか(もしくはSubにすべきか)という話とは関連が薄い。
2019/02/15(金) 12:04:24.39ID:FxoJIoi60
>>155
別にfunctionの使い方を考えないならどうでもいいじゃない
ただ誰も使わんだろ、それは言い過ぎか使うやつはいるな
2019/02/15(金) 12:06:23.85ID:FxoJIoi60
基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
2019/02/15(金) 12:09:16.16ID:GIzZTHxJM
>>157
不思議な意見を言う奴だな?
2019/02/15(金) 12:12:48.44ID:U9ClSHCYM
>>158
ここは、もうやめよう
2019/02/15(金) 12:42:06.25ID:Aa3kOoYYM
俺は理解したいけど使うの自分ならまぁ動けば良いや派です

話題変わるけど今はselenium使えないの?
firefox操作したいけど色々なサイトのコード試しても動かんのだけど最新のseleniumVBAでfirefox操作するVBA使ってる人居たらfirefox起動からログイン処理するコード貼ってほしい
2019/02/15(金) 12:51:15.55ID:Qph8FA2WM
>>157
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
確かに>>150は恥ずかしいなw
2019/02/15(金) 12:54:55.89ID:FxoJIoi60
>>161
ふ〜ん、でどのように?(笑)
163デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/15(金) 13:05:41.84ID:QYjRxS22H
配列を使わざるを得ないなら二次元配列に変更前と変更後を並べて突っ込む
2019/02/15(金) 13:08:15.40ID:FxoJIoi60
>>161
まさか、148で変更をBoolean返すようにしたのを前提に150を書いたけど
何も読まずに書いてる?
2019/02/15(金) 13:13:10.46ID:FxoJIoi60
もうやばいけど、バカって好きだな
2019/02/15(金) 13:19:37.16ID:U9ClSHCYM
>>161
で、何か意見は?
2019/02/15(金) 14:34:08.07ID:GIzZTHxJM
>>163
結局そうなるよね。
一括で貼り付ければ楽なのに、わざわざ If でまだらに個別セットなんて却って遅くなる。
2019/02/15(金) 14:59:45.37ID:FxoJIoi60
まあ、しょうがない罠
分かんないんだもの
2019/02/15(金) 15:22:25.20ID:Qph8FA2WM
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
とか言いつつ質問者の意向もわからんのにコード書いてドヤるとか w
2019/02/15(金) 15:34:51.44ID:FxoJIoi60
>>169
じゃあ、お前ヒントも書かずにわかるのか?
ってか、引きこもりの文盲か?
2019/02/15(金) 15:36:42.23ID:FxoJIoi60
あっ、すまん、ヒントを書いてもわからないんだよな
2019/02/15(金) 15:43:07.43ID:FxoJIoi60
>>167
どんだけ、アホで生きてるんjンだよ
関数の貼り付けとセルへの値の書き込すらわからんかな
2019/02/15(金) 17:36:05.74ID:Qph8FA2WM
>>170-172
だから
> 基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
とかが不思議ちゃんて言われてるんだよ
セルへの書き込み程度でドヤるような奴だからしょうがないだろうけど w
2019/02/15(金) 18:35:03.47ID:U9ClSHCYM
>>173
うふ
175デフォルトの名無しさん (ワッチョイ c701-OvAq)
垢版 |
2019/02/15(金) 19:18:49.62ID:FIDflx8L0
Range("A1")="名前"
Range("A2")="住所"
Range("A3")="性別"
Range("A4")="郵便番号"
みたいな複数にわかる処理を
Range("A1:A4")="名前、住所、性別、郵便番号"みたいな感じ(もちろんこれではダメ)で
一行(一回の処理)でまとめて設定できるような方法ってありますか?
176デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/15(金) 19:20:38.46ID:kIiggQTh0
>>175
ある
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))
これも書き換えがあったかどうかを判定する必要はない。
普通は後者を選ぶだろう。
178デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/15(金) 19:28:49.74ID:kIiggQTh0
>>177
これダメなやつ
最も負荷の掛かるセルへのアクセスは最小限にするべき
コードが短ければいいってもんじゃない
2019/02/15(金) 19:37:44.26ID:GIzZTHxJM
>>178
なんだよ
セルの個数の問題なのか貼り付け回数の問題なのかはっきりしろ
180デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/15(金) 20:01:27.87ID:kIiggQTh0
>>179
自分で処理時間計ってみれば?
2019/02/15(金) 20:18:49.96ID:V814XEHD0
>>175
Array
182デフォルトの名無しさん (アメ MM6b-+q6E)
垢版 |
2019/02/15(金) 22:25:19.73ID:f25ghBxYM
まあ、例えばひづ
2019/02/15(金) 22:31:54.84ID:f25ghBxYM
スマホは書いてる途中で書き込んじゃう癖が有って申し訳ない
例えば日付を月日で表しているセルを文字列で取得すると月日の文字が取得できる
その文字をそのセルに書き込むと数値としての月日じゃあなくなるよな
不用意に変換しないことも大事なんだがな
2019/02/15(金) 23:12:49.57ID:f25ghBxYM
気になってshift jis の文字コードを確認してみた
If 166 < c And c < 176 Then
これは半角小文字だよ
お題は全角カタカナ小文字だろっと
2019/02/15(金) 23:38:50.38ID:e71gRKct0
凄いよな。
何でこうも、どんな用途に使うのかわからないような処理ばっか出てくるんだか。

そのうち、VLOOKUP(縦検索)でもHLOOKUP(横検索)でもない、
斜め検索のJLOOKUP作れとか言い出しそうだな。
2019/02/16(土) 00:29:38.87ID:VwWEnU/S0
データ処理の関数がわかんなくてお前らに横投げしてるからだろjk
2019/02/16(土) 01:02:24.60ID:Q7QEPoKZM
まあ何だな 全角カタカナの文字列に半角突っ込む奴の指示は聞かないけどな
2019/02/16(土) 01:38:49.39ID:tkdqnLOdd
最初の質問は>>135だぞ
処理したいのは半角カナ、作りたいのはFunction、関数の返す値は修正後の文字列と仕様が明記されてるのに、どうしてBooleanだのByRefだのが出てくるんだよ
おまけに全角とか言い出すやつまで出てくるし
2019/02/16(土) 02:12:02.80ID:Q7QEPoKZM
ァィゥェォャュョッ 全角小文字
ァィゥェォ 半角小文字
書いてるのが全角だったからな
2019/02/16(土) 02:22:26.92ID:Q7QEPoKZM
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE
(A1,"ァ","ア"),"ィ","イ"),"ゥ","ウ"),"ェ","エ"),"ォ","オ"),"ャ","ヤ")
,"ュ","ユ"),"ョ","ヨ"),"ッ","ツ")
191デフォルトの名無しさん (ブーイモ MM6b-KyI1)
垢版 |
2019/02/16(土) 05:24:29.40ID:evls1zM4M
>>190
ワラ
2019/02/16(土) 05:32:17.75ID:Q7QEPoKZM
素人が素人に頼むとなそうなるわな
(笑)
2019/02/16(土) 07:48:58.08ID:GEWA9gU60
方向が変わったのは>>148がきっかけだよね
2019/02/16(土) 07:53:50.02ID:q1DAaOKG0
>>188-189
そこは最初から違和感あったわ
> VBAで、半角カナ文字列を与えると
って書いてて
> ァィゥェォャュョッ
って全角で書いてるからネタだと思って放置してたけどァィゥェォッュョみたいな文字ってスマホだと入力できないのな
(いや、できるかも知れんが俺にはわからんかったのでこれはコピペで入力した)
まあそれならそうと書いて欲しい

この手の変換はそれなりに需要があるみたいで
カタカナ 小さい文字 変換 vba
とかでググるとそれなりにヒットする
とりあえずは
https://www.relief.jp/docs/002223.html
とかを参考にすればいいと思う
2019/02/16(土) 10:00:10.02ID:uFHexw8O0
スマホで半角カナ小文字の入力は、俺のXperiaの場合だと「la」と入力すると全角小文字の「ぁ」になって、変換を押すと候補に半角「ァ」が出てくる
2019/02/16(土) 10:07:20.68ID:uFHexw8O0
フリック入力ならキーパッドの「ま」の下の「小」をタップすると小文字になって、候補に半角も自動的に出てくる
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") = [{"名前";"住所";"性別";"郵便番号"}]
2019/02/16(土) 14:00:48.72ID:i29F+S9hM
VBAの2次元配列って1次元配列として使えないのね。不便。
199デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/16(土) 14:26:02.22ID:Y5C6RkaG0
二次元配列は何が入ってるか分かりにくいしネストも増えやすいから構造体かクラスを使う
2019/02/16(土) 14:36:39.42ID:eWrDkcRxM
>>198
割り切ってジャグ配列をメインに使えばいい
Rangeはしょうがないけど
2019/02/16(土) 15:38:49.30ID:XgEm9HUa0
>>199
XLシートが二次元の表なんだから難しくないだろ。
三次元なら立体を思い浮かべればいい。四次元になると時間をイメージかな。そこまでやったことないからわからん。
三次元までのネストの深さは気にならないな… ifとかで増えるにしても。増えすぎるなら内部を切り出すかな。
まあ、仕様によってどう作るかはいろいろだけど。
2019/02/16(土) 16:03:55.03ID:kXl7LE8Fx
n次元 = n階層の木構造とイメージするのが単純で良いと思うが
203デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/16(土) 16:14:59.54ID:3bJEG0FOH
>>201
難しくないのにわからんって馬鹿?
2019/02/16(土) 16:41:41.01ID:eWrDkcRxM
n次元より配列の配列の...の方が再帰的に扱いやすい
2019/02/16(土) 17:53:27.66ID:q1DAaOKG0
>>203
日本語不自由?
難しくないのは二次元
わからんのは四次元
206デフォルトの名無しさん (ワッチョイ 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の配列を呼び出したいんですがどこが間違っていますか?
2019/02/16(土) 23:01:11.68ID:V3lev6Wl0
>>206

arr = arra
End Function
2019/02/16(土) 23:03:14.34ID:CD9VXZwW0
エラーメッセージ何よ。
209デフォルトの名無しさん (ワッチョイ c701-OvAq)
垢版 |
2019/02/16(土) 23:06:17.40ID:0In5hf0F0
>>208
インデックスが有効範囲にありません
2019/02/16(土) 23:10:54.03ID:CD9VXZwW0
>>209
ああ、よくある、結局原因がよくわからないやつね。
試したら、>>207が正解だったわ。

面白いな。Thisworkbookに書いてあるものを呼ぼうなんて、
考えたこともなかったから、それが原因かと思ったわ。
2019/02/16(土) 23:17:04.90ID:7Iomz0v50
そもそも配列名とプロシージャ名が同じところもおかしい
2019/02/17(日) 00:05:03.03ID:kxT8s3Mp0
馬鹿はそんなもん
間違いにくいようにコードを書くことをしない
213デフォルトの名無しさん (ワッチョイ 5f7c-We++)
垢版 |
2019/02/17(日) 09:02:57.20ID:hMcsTv+Y0
>>212
コードを書かなきゃ間違えないということか、なるほど。
それとも馬鹿は誤解を受けないような文章を書くことをしないってことか?
214デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 09:28:38.67ID:l7X7saNL0
俺が分かるからいいみたいな考えだとチームで開発はできないよ
215デフォルトの名無しさん (ワッチョイ 5f7c-We++)
垢版 |
2019/02/17(日) 10:19:09.83ID:hMcsTv+Y0
>>214
それはよく解る。保守性も悪くなるよね。
2019/02/17(日) 10:48:02.04ID:1fMGblo0M
一般的なプログラミング言語なら正しいけど、VBAだとかなり厳しくない?
下に合わせるとそれこそ可読性も保守性もクソもないゴミにしかならないよ
2019/02/17(日) 10:53:43.33ID:vi4O111wa
言語は問わず下に合わせるとゴミになる
属人性の排除といって下に合わせたがる人が少なく無いけどあれは間違いなんだ
2019/02/17(日) 11:25:11.92ID:EkiBf8gr0
VBAで下に合わせると、やたらSelect & Selection.Copyが多い、
マクロの自動記録じゃねえのこれ?
みたいなのが出来上がる。
2019/02/17(日) 11:45:18.78ID:7MWZQWrl0
ActiveHogeHoge へ参照が多いとそうなんだろうなと思うことにしている
220デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 11:45:44.34ID:l7X7saNL0
>>216
>>217
>>218
意味が伝わってないみたいだけど
cells(i, 1) = arr(i-1, 0) がセルに何が書き込まれるかはコードの前後を追わないと分からないよね
これを分かるようにするのが分かりやすいコード
プログラミングが上手か下手かは関係ない話
221デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 11:51:57.63ID:l7X7saNL0
多次元配列も Dim lngEleName As Long とか専用ループ変数を準備してるならいいけど、ijkで回してるのを見た日にはそいつを殴りにいくね。
2019/02/17(日) 11:59:45.89ID:plSLxTsM0
ひえー
なんか諸先輩方思うところ多かったようで
自分も書くとき気をつけないと
初心者ですを免罪符にしないように気をつけよう
2019/02/17(日) 12:32:03.24ID:jVC6vo8Y0
>>221
i, j, k でいいよそんなのw
2019/02/17(日) 12:47:43.60ID:1fMGblo0M
>>221
i, j, k で分かりにくくなるような長ったらしいプロシージャを書くのが悪い
225デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 13:16:45.17ID:Nxpc9YF00
>>223
上司「お前クビ」
226デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 13:31:38.58ID:Nxpc9YF00
>>224
プロシージャが簡潔ならおk
2019/02/17(日) 13:42:14.79ID:gMXfU/jdM
>>225
つまらない趣味にこだわるのは中学生までだぞ
2019/02/17(日) 13:49:15.60ID:gMXfU/jdM
偏見かもしれんがプログラミングで日常言語に近づけようとするやつは代数とか苦手だった?
って思っちゃう
229デフォルトの名無しさん (ワッチョイ ff7c-wP4P)
垢版 |
2019/02/17(日) 14:06:36.59ID:7mUUrd8D0
蛇腹erは代数が苦手(キリっ
230デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 14:20:05.25ID:Nxpc9YF00
>>227
上司「このiってなに?ちゃんと説明して」
2019/02/17(日) 14:51:51.50ID:naWxhgEk0
単なるループカウンタですけど?
見ればわかりますよね?
232デフォルトの名無しさん (ワッチョイ bfb7-uWgP)
垢版 |
2019/02/17(日) 14:57:39.75ID:k4RkjrxP0
>>221
Ing Ele ってなんの略ですか
233デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 15:13:51.30ID:Nxpc9YF00
>>232
しばくぞコラ(LongとElementだよ(にっこり))
2019/02/17(日) 15:32:11.89ID:t0Nzx7bGx
ループカウント用のプロシージャ内ローカル変数でiとかjとか使うのはありだと思う
モジュールレベル以上の参照スコープを持たせた変数をiとかjとかarrとかbufとかで宣言されてたら流石にキレるな
2019/02/17(日) 15:36:00.05ID:de8FYcuQ0
スコープが大きいほど変数名も長くして
236デフォルトの名無しさん (ワッチョイ e7b0-3a8x)
垢版 |
2019/02/17(日) 15:43:21.47ID:urjL+jec0
今時ハンガリアン使ってるのクソダサい
237デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 15:49:41.73ID:Nxpc9YF00
俺はゴールデンの方が好き
猫飼ってるから無理だけど
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
とかしてもダメでした
2019/02/17(日) 16:40:07.44ID:vi4O111wa
共通の処理は共通モジュールかクラスに置いてください
シート1、シート2からはその共通の処理を呼び出してください
イベントハンドラはユーザーコードから呼び出すものではありません
240デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 16:50:40.07ID:Nxpc9YF00
>>238
Privateが付いてるプロシージャはそのモジュール内でのみ呼び出し可能
sheet1とsheet2は別モジュール
だから怒られてる
241デフォルトの名無しさん (ワッチョイ 87da-yQ/S)
垢版 |
2019/02/17(日) 16:54:09.55ID:Bys9dR540
化石みたいなレスのあるスレだな
2019/02/17(日) 17:02:42.50ID:EkiBf8gr0
>イベントハンドラはユーザーコードから呼び出すものではありません

面倒くさいとき、普通に呼び出してたわ。
2019/02/17(日) 17:18:01.63ID:Rm6p2g7t0
>>240
Public にしてもはずしてもダメです
2019/02/17(日) 17:22:34.48ID:kxT8s3Mp0
馬鹿はClassを知らない
2019/02/17(日) 17:57:40.00ID:EkiBf8gr0
>>243
>>206みたいにしても?
246デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 18:15:37.59ID:l7X7saNL0
>>243
そもそもボタンってデフォで標準プロシージャに追加されなかったっけ?
標準モジュール作って、Sub ButtonClear_Click() をまるごと移動させたらいけんじゃね?
247デフォルトの名無しさん (ワッチョイ 5f7c-We++)
垢版 |
2019/02/17(日) 18:27:30.13ID:hMcsTv+Y0
>>244
そんくらい知ってるよ、夏の日の1993だろ。
昭和生まれをナメるなよ。
2019/02/17(日) 18:37:55.36ID:Rm6p2g7t0
調べてたらこんなのが出てきました
http://jscript.zouri.jp/Source/ExcelCtrl.html#LINK7
ちょっとずれてはいますが、ここで

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

君の場合はButtonClear_ClickをSheet1からもSheet2からも使いたいんだからButtonClear_Clickの中身を別関数にして、Sheet1のButtonClear_Clickからその関数を呼び出すようにする。
2019/02/17(日) 19:09:51.42ID:vi4O111wa
vbaerは他の言語やらんから非常識なコードを悪気なく書いてしまうんだよな
2019/02/17(日) 19:12:06.36ID:Rm6p2g7t0
>>252
ちょっと違うんだなあ

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

標準モジュールにあるものはもちろん呼べるけど、疑似的にもそうしないといけないのかな
255デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 19:19:24.91ID:l7X7saNL0
>>254
Worksheets(“シート名”).Range() = 処理
2019/02/17(日) 19:20:23.75ID:EkiBf8gr0
試したら、Sheet2.ButtonClear_Clickで動くわ。
もちろん、Privateは削除でね。

>>252
一般的にはそうだけど、
実際には出来るんだから、思い込みだよ。
257デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 19:22:02.36ID:l7X7saNL0
ていうかsheet1にコードを書いたとしてもsheet2がアクティブになってればそっちに書き込まれるからね
2019/02/17(日) 19:22:44.45ID:Rm6p2g7t0
>>256
Worksheets("sheet1").ButtonClear_Click
みたいな仰々しいことしなくても良かったのね。 ありがと。 あとでやってみる
259デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 19:33:19.37ID:l7X7saNL0
>>258
それは入れる物が間違ってる
2019/02/17(日) 19:50:26.47ID:X48frccGd
>>254
違わない。
設計の話をしている。
シート2からも呼び出すんだからシート1に対して行う処理であっても変わらん。

というか、基本的な所で噛み合ってないな。
どんな所に書いてもいきなりブックやシートの省略はしないのが基本だぞ。
Withを使うかオブジェクト変数で受けるのが基本だ。
2019/02/17(日) 19:56:06.48ID:Rm6p2g7t0
>>256
おかしいなあ。 オブジェクトが必要ですっていうエラーが出てきて動かない
2019/02/17(日) 19:56:59.16ID:9z/u7JpJ0
「ちょっと違うんだなあ 」は草
2019/02/17(日) 20:15:00.10ID:jhLaQWBk0
>>261
君面白いねえ
264デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 20:26:28.38ID:l7X7saNL0
>>261
Sheet1.Select
2019/02/17(日) 20:36:24.20ID:EkiBf8gr0
>>261
これでtestって出ない?

[シート1]
Sub ButtonClear_Click()
 MsgBox "test"
End Sub

[シート2か標準モジュール]
Sub ButtonClear_Click()
 Sheet1.ButtonClear_Click
End Sub
2019/02/17(日) 20:39:08.27ID:Rm6p2g7t0
>>264-265
sheet1.Selectをしなくても、セルへの代入だけなら出来た.。 シート2のボタンを押しても、シート1のセルに書き込まれる
でも、Cells(10,10).Selectみたいなセルの選択をするときは、sheet1.selectをしておかないとエラーになる
267デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 20:43:50.21ID:l7X7saNL0
>>266
書き込みたいシート名を指定する
Worksheets(“シート名”).cells(1,1) =
2019/02/17(日) 20:44:14.77ID:EkiBf8gr0
>>266
こうやって書けば。

Worksheets("Sheet2").Cells(10, 10).Value = "test"
2019/02/17(日) 20:46:06.79ID:Rm6p2g7t0
>>267-268
いやだから、書き込みだけなら、問題なく出来るって書いたじゃん
裏でも出来る
でも、セルの選択とかが入ると、シートをSelectして動かないとダメ
270デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 20:47:37.46ID:l7X7saNL0
>>269
そりゃそうでしょ
271デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 20:53:21.26ID:l7X7saNL0
つーかエラーメッセージ全部貼って見せて
2019/02/17(日) 21:43:11.83ID:de8FYcuQ0
vbaの関数ってデフォルトが参照渡しなんすね
やらかすとこだった
2019/02/17(日) 21:45:56.53ID:kxT8s3Mp0
お前らオブジェクトのこと全然わかってないんだな
馬鹿ばっか
274デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/17(日) 21:57:57.43ID:l7X7saNL0
>>273
答えplz
2019/02/17(日) 23:04:18.50ID:t0Nzx7bGx
こんなスレ見てたら頭おかしなルで
2019/02/17(日) 23:11:53.07ID:kxT8s3Mp0
>>274
継承されたわけでもないオブジェクトから別のオブジェクトのメソッドをどうやって呼び出すかわからんのか?
馬鹿は死ねよ。
2019/02/17(日) 23:38:23.26ID:vi4O111wa
言い過ぎでは?
繊細な人だったら傷付くよ
2019/02/17(日) 23:57:36.39ID:t0Nzx7bGx
シート1内外から呼べるPublicな共通関数を作って、クリックイベントハンドラのコードと他モジュールのコードの双方から呼ぶようにすれば良いだけでは
イベントハンドラを直接コードユーザにコールさせようとするのはおかしい
2019/02/18(月) 00:01:45.68ID:WfgOED4y0
>>272
ByRefもByValも付けずに宣言するとそれはByRefになるって事をかな?
であれば既にやらかしてるのを気づかずにいる可能性があるから過去のモジュールを点検した方がいい
2019/02/18(月) 00:02:49.20ID:5bMGA+jIa
いやよく考えるとイベントハンドラを呼ぶのはおかしいがシート2クラスのメソッドを呼ぶだけなら別におかしくはなかった
それだけでは共通化する理由にはならない
281デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/18(月) 00:59:55.76ID:hC76sm/R0
>>276
へーシートもオブジェクトなのか
全然意識してなかったわ
勉強になったよありがと
でもお前口悪いから友達いなさそうw
282デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/18(月) 01:23:07.51ID:hC76sm/R0
シートモジュールに構造体宣言してハマった記憶がある
そういうことだったのか
2019/02/18(月) 01:23:55.49ID:5t9ctY5m0
頭が悪い 顔が悪い 目が悪い 口が悪い
性格も悪い 手癖も悪い 足腰も最近悪い
酒癖も悪い 女癖も悪い 寝つきも悪い
そんな俺でもその返事の仕方は失礼なんじゃないかな?
とは思うけど。
もしや高度なツンデレさんなのかな?
と、解釈して

次の方 ( ゚д゚)ノどうぞ
284デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/18(月) 06:33:10.39ID:hC76sm/R0
きっと彼の親はVBAに殺されてしまったんだよ
2019/02/18(月) 08:08:58.79ID:MgpZvmd8x
シートもオブジェクトなのか、ってのはちょっと驚いたな
シートどころか自作フォームも含めてGUIで見て触れるもののほぼすべてがオブジェクトだぞ
2019/02/18(月) 08:18:13.27ID:8se8rGxR0
なんか、バカばっかりだなあ
>>269に他のシートにもアクセスできるって書いてあるだろ。何がオブジェクトだよ
ただ、セルのセレクトは出来ないって
287デフォルトの名無しさん (ワッチョイ ff6f-DcjB)
垢版 |
2019/02/18(月) 08:58:38.38ID:AsxIQPE70
前にやってたユーザサポート業務を思い出した
2019/02/18(月) 12:38:44.05ID:UyrImbcld
>>286
バカはお前。
そのセルのセレクトができないと言ってる元の命令がオブジェクトがどういう階層になってるか分かってない典型的な例。

そういう人のコードだから、セレクトなんて必要無いだろうなと先読みしてるんだろう。
何しろセレクトすることなんて極めて殆ど書くことが無い(必要となることが無い)処理だからな。
2019/02/18(月) 13:13:11.83ID:qW3BE+Gz0
ブックもシートもセルもボタンもシェイプもみんなオブジェクトだよ

WindowsはOSそのものがオブジェクトの塊
そういうふうに設計されてる
2019/02/18(月) 13:49:41.69ID:uzxEynMwM
Selectionはイミィディエイトからはよく使う
291デフォルトの名無しさん (ワッチョイ ff7c-wP4P)
垢版 |
2019/02/18(月) 16:12:57.29ID:JTiYKdtz0
化石観たいな臭いレスでも良いけど
もうちょっと面白いレスが観たいな
VBAネタもう飽きた
2019/02/18(月) 16:21:45.06ID:luqjRhnP0
https://japan.cnet.com/article/20087747/

「Microsoftにとって、(Officeのような)ウェブベースのアプリケーションサービス
を提供することは願ってもないことだろう。これにより、エンドユーザーや違法コピー
の問題をもっとしっかりコントロールできるようになる。しかも、大量にメディアを
用意したり、それを流通させるコストも不要になる」
--Garcia on Slashdot
2019/02/18(月) 16:23:02.33ID:L3SsO4kg0
>>292
誤爆してしまった。
スマソ。
2019/02/18(月) 17:39:58.04ID:xGyDNRFK0
VBAスレにまで来てVBAネタ飽きたって、こんなとこくる暇があったら病院行った方が良いんちゃう?
2019/02/18(月) 21:13:51.18ID:25ajLZ330
vbaおそすぎい…
2019/02/18(月) 21:25:29.27ID:Y1NxofRZx
Selectメソッドは記録マクロの記述のためだけに存在する命令と言ってもいいくらいのものだからな
実際に実務でSelectメソッドを書いたことは殆どない
特定のセル範囲(特に複数セル)が選択された状態を作り出すことに実務上の意味があるならば書かざるを得ないんだろうけど
2019/02/18(月) 21:53:14.97ID:eiV6jRN10
どうしてセレクチオンしないの〜!
2019/02/18(月) 22:15:32.75ID:aFs+DxuY0
>>296
コードの最後に
cells(1,1).select
って書いておくのが僕
2019/02/18(月) 22:31:21.38ID:R8eupock0
カーソル位置の初期化によく使うけどな。Select
2019/02/18(月) 22:37:53.94ID:hG18nYywr
application.gotoを使う
2019/02/18(月) 22:51:42.46ID:Y1NxofRZx
スクロールの有無を選べるApplication.Gotoの方が小回りが効くわな
302デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/18(月) 23:52:49.47ID:hC76sm/R0
SelectよりActivateの方がしっくりくる
2019/02/19(火) 00:02:24.54ID:mTnWFuG30
>>302
違いってなんだっけ?
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

今色々試しただけだから、間違ってたらゴメン
2019/02/19(火) 08:36:38.55ID:9CovpibD0
>>304
Oh,thx.
2019/02/19(火) 11:46:22.25ID:9gUKp59aM
WebBrowserのフォームに文字列変数に入れたHTMLを反映させるのってどうすれば良いですか?
2019/02/19(火) 12:39:59.48ID:oemf1bOsd
>>306
説明が分かりにくい。

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

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

フォ―ムにWebBrowserコントロール貼り付けて、指定したURLを表示させたいってこと?
2019/02/19(火) 12:42:06.27ID:oemf1bOsd
それともHTMLのソースコードを元にブラウザ表示させたいってこと?
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
310デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/19(火) 13:06:28.07ID:DYfM7cdrH
質問じゃないけどcsv取り込みでQueryTable使ったら感動した
ググるとほとんどLine Inputでやってるんだもんなぁ
311デフォルトの名無しさん (アウアウウー Sa4b-Ayov)
垢版 |
2019/02/19(火) 13:10:41.92ID:mzDqOD0La
ExcelでJavaScriptが使えるみたいだけど、どんなことに使えるのでしょうか?
2019/02/19(火) 13:21:57.84ID:XTzrMDQC0
>>310
便利なんか?
住所の番地ってどうにかできるんかね
1-1が日付扱いになってしまう

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

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

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

結局やることはエクセルのスクリプトなので、vbaでも十分ちゃ十分、
jsのノウハウが積み上がるまでは、vbaの方が楽出来ると思う
316デフォルトの名無しさん (アウアウウー Sa4b-Ayov)
垢版 |
2019/02/19(火) 13:55:09.79ID:mzDqOD0La
>>315
なるほどなるほど。
詳しく説明してくれてありがとう!
たしかにvbaは歴史があるから、調べてるのは楽だよね。
JavaScriptはしばらく家で勉強した方が良さそうだねw
時期をみて上司に提案してみるよ!
2019/02/19(火) 14:12:13.94ID:yAUMSA3na
Java script は
VBA → VB.Net → ASP.net って勉強して行く過程で勉強することになるから
そんなに慌てなくてもいいよ
2019/02/19(火) 14:15:00.77ID:D8b3v+FoM
>>317
ドヤ顔のところ申し訳ないけど、ASP.NET(最新のものではなくVBerが知っている方のASP.NET)も化石だよ
2019/02/19(火) 14:16:57.12ID:D8b3v+FoM
ちなみに最新のASP.NETと呼ばれるものはVBer達がよく知っているASP.NETとは全く互換性がない
それどころか.NET Frameworkすら切り捨てた
2019/02/19(火) 14:24:40.78ID:XTzrMDQC0
>>319
知らなかった、昔のASP.NETの印象しかない。名前が完全に足引っ張ってる
2019/02/19(火) 15:20:23.15ID:oSkNfL9QM
>>307
>>309
説明不足すみませんでした
ユーザーフォームにwebBrowserのコントロールを張り付けて、そこにURL指定ではなくて直接htmlの文章を書き込みたいです。
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
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

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

あと次回は自力で出来るように頑張ります〜!!
ありがとうございました!
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に入れる方法ですかね?
330デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/19(火) 20:09:29.49ID:3o3WGLUD0
>>329
多次元配列は最後の要素しか拡張できないから、左の要素はUbound(Split(1行目,”,”))で最初に確定させるしかない
右の要素はredim preserveで拡張できるから普通にループで増やしていけば良い
2019/02/19(火) 20:17:18.51ID:f2qQz3/xx
>>323
クラスにしたらいいんじゃないの
vbaで引数付きコンストラクタの実現は難しいけど、
四つの座標情報を引数に取るプロパティ関数を用意して、Rect構造体のプロパティを持たせるようにすればそれらしいことができるのでは
2019/02/19(火) 20:41:15.17ID:XJA9DtkM0
>>331
VBAでもクラスって出来たんですね。 ちょっとググってみました
ありがとう。 これは知らなかった
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
改行多すぎらしいので:で詰めて書いてる
2019/02/19(火) 21:25:35.60ID:eXSGnhOj0
>>329
エクセルでCSV開いてシートをそのまま2次元配列に突っ込めば良いんじゃないか
2019/02/19(火) 21:47:03.10ID:LH3y88CS0
>>319
え?
そうなの?
それは知らなかった。

ちなみに最新はASP.netのcore2.1だと思うんだけど
VisualStudioでASP.Net Coreプロジェクトを作る際、
.Net Coreと.Net Freamworkのどちらのプラットフォームを選択するか聞いてくるけどあれは何なの?
2019/02/19(火) 22:14:11.03ID:+ssFN3TXa
>>335
ASP.NET Core 3.0以降ではFull .NETが切り捨てられることが公式に明言されてる
3.0はまだPreviewだけどね
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」の上か下かという質問です。
2019/02/19(火) 22:37:52.77ID:XTzrMDQC0
定義は一番最初にまとめて全て書くと管理しやすい
個人的にはそもそも書かないけどな〜
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のが良いですかね?
2019/02/19(火) 22:50:47.62ID:VJWnLClRd
>>337
VBは上にまとめ
C#は使う時
他の言語はしらん。あくまでイメージ。

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

だからそのループも逃がす
2019/02/20(水) 00:08:08.78ID:Hgznwu9O0
>>339
あなたの用途に合ってるのは2次元配列じゃなくて配列の配列。
ReDim arr(0 To n)
arr(i) = 別の配列  ` i : 0〜n
みたいなことができる

「別の配列」のところに、csvの一行分を処理して配列を返す関数を当てはめればいい。
もちろんクラス化してもいいけどさ
2019/02/20(水) 03:34:25.29ID:B2QSVSiS0
>>329-334
Ruby では普通に、2次元配列に入る

require "csv"

p CSV.read( "test.csv" )

結果
[["id", "first name", "last name", "age"],
["1", "taro", "tanaka", "20"],
["2", "yumi", "adachi", "21"]]
343デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/20(水) 07:38:24.67ID:5mnmpgTAH
クラスって要素名を予め宣言しないといけないからcsvの要素が変わると対応できない?
教えてエロい人
2019/02/20(水) 07:54:07.56ID:KjQRkkj7x
要素名で名前解決する処理がないなら、レコード値を配列プロパティで受け渡すだけで良いと思う
名前解決が必要なら要素宣言しないといけないね
345デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 11:17:04.40ID:Aqbfj0bAp
教えてください。
エクセルのマクロです
PDFファイル(100ページくらいある)を、エクセルに、全ページをたて一列に貼り付けたいのですが、
どう書けばいいでしょうか
2019/02/20(水) 11:58:45.20ID:EgtCXVwuM
RPAを買ってコピペを自動化するのが手っ取り早いよ
2019/02/20(水) 12:07:33.49ID:crzgHpZv0
なぜPDFを貼り付けるのか
そのまま印刷すればええやん

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

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

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

>>349
そういやそっちの方が早いね
351デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 12:38:58.44ID:Aqbfj0bAp
>>349
大量のコメントや式です
352デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 12:39:49.65ID:Aqbfj0bAp
>>349
大量のコメントや式です
2019/02/20(水) 12:41:03.23ID:zcHFtFOnd
>>345
「教えてください」で始まる質問をするのは馬鹿しかいない法則
354デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 12:53:11.56ID:Aqbfj0bAp
分割するとは?
100ページのドキュメントだから100個のファイルを作成するということでしょうか。
2019/02/20(水) 12:55:03.75ID:HgkG/6H60
そういう事
356デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 13:15:01.09ID:Aqbfj0bAp
分割しないで、ページを読み込み、貼り付けはできないのでしょうか?
357デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/20(水) 13:17:35.13ID:5mnmpgTAH
100in1で出力すればいけんじゃない?
2019/02/20(水) 13:27:36.70ID:zcHFtFOnd
エクセル方眼紙の厚かましい馬鹿は死ね
359デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/20(水) 13:27:47.31ID:5mnmpgTAH
PDFを画像にするっていうのはプリンタで印刷するのと同じイメージだから基本1ページ1ファイルね
2019/02/20(水) 13:48:22.42ID:HgkG/6H60
>>356
できるけどめんどくさいんだって。
自分用ですら>>350の手順踏む
この件は誰もやらんって断定するから諦めたほうが良い
361デフォルトの名無しさん (JP 0H4f-mnSR)
垢版 |
2019/02/20(水) 13:51:25.06ID:5mnmpgTAH
pdfをtxtにできるサイトがあるね
2019/02/20(水) 14:19:25.05ID:3CKo6tJGF
そもそもスレタイ読めない馬鹿は死ね
2019/02/20(水) 14:49:29.70ID:crzgHpZv0
どうしてもVBAとExcel上でやりたかったら
100ページのPDFを100枚の画像に変換するのはフリーウェアで一発でできる
画像をワークシートに並べるだけならVBAで簡単に書ける

上司の命令とかで他の選択肢がないなら、俺ならこうする
2019/02/20(水) 16:49:36.00ID:RE4oCyjZM
>>345
>エクセルのマクロです
なにがどうエクセルのマクロなのか全くわからなくて面白かった
2019/02/20(水) 17:37:12.40ID:HgkG/6H60
>>362>>364
エクセルのマクロだけでいけるとおもったんやろ
実際出来なくはないと思うけどすげーしんどいって事にまで気が回らなかったことは仕方ない
2019/02/20(水) 17:59:23.96ID:lkHSh4f40
「○○したいんですけど教えて下さい」
「なんでそんなことしたいの?バカなの?」

何でこんな回答いちいちすんだろ
答えてくてウズウズしてる自称プロが自分のわからない質問来てカリカリしちゃってるのか?
2019/02/20(水) 18:50:33.54ID:fho/sw2r0
なんでそんなめんどくさいことするの?
〇〇でよくね?

とかよく見るけど、質問者が聞いてる事だけ教えればいいのにと思う。
368デフォルトの名無しさん (ワッチョイ c701-mnSR)
垢版 |
2019/02/20(水) 19:09:49.05ID:W87kh7t10
できない。

以上。
2019/02/20(水) 19:09:49.63ID:HgkG/6H60
>>366
大正解
vbaと実務の範囲を分かってない未熟者

>367
それを言うと
「〇〇はやりたくないんですw」
という回答が帰ってくるのがもう過去何度も
2019/02/20(水) 19:19:56.14ID:xmZEnq49a
QAに集中したいならteratailかstackoverflow.jpがオススメですよ
371デフォルトの名無しさん (ササクッテロル Sp7b-nJZM)
垢版 |
2019/02/20(水) 19:30:07.27ID:Aqbfj0bAp
1ページ目が貼り付けられるけど、ページを指定できないのかな
2019/02/20(水) 21:05:48.46ID:Wi/z/KN10
>>311
htmlに書かれているJavaScriptを実行したい時とか。
2019/02/20(水) 22:38:30.49ID:jH2rY7Fc0
めんどくさいっていうか、AcrobatOLE使えないと無理じゃない?
Excelだけで完結できる手法あるの?
2019/02/20(水) 22:49:49.45ID:pZJkKCoer
>>367
質問者が気付いてない、知らないだけの場合もあるから
2019/02/20(水) 22:57:03.31ID:Wi/z/KN10
上司から言われてるだけというケースもあるだろうな。
2019/02/20(水) 23:14:04.77ID:zOoel5SRx
手順固定で指示する糞上司っているよね
その手順がボトルネックになって糞の塊のようなツールが出来上がったりする
2019/02/21(木) 01:06:52.19ID:wp9rEEne0
>>373
ハンドアセンブルを覚える。
バイナリで書き出す。
378デフォルトの名無しさん (ワッチョイ 7d01-Y1hu)
垢版 |
2019/02/21(木) 05:02:12.65ID:fo0B5AuF0
>>376
組織はそれが普通。趣味で仕事やりますというわけには行かない
2019/02/21(木) 07:46:17.08ID:X1BgxDGFM
昭和の労働集約的な企業の紹介乙
380デフォルトの名無しさん (ワッチョイ 6a98-Y1hu)
垢版 |
2019/02/21(木) 08:00:03.08ID:WrVB68JS0
趣味で作り上げたとしても説明してレビュー受けないといけない。その労力って結構きついしいっそ言われたまま作り上げた方が精神的にラクね
2019/02/21(木) 08:15:00.93ID:Uwc+mrjba
>>376
固定するのは百歩譲って良いんだけど説明も了解もなく決める人には困るね
より良い方法を提案する機会がないままルールとして決まってしまう
382デフォルトの名無しさん (JP 0H2e-AaBj)
垢版 |
2019/02/21(木) 08:24:52.09ID:hsBre2j/H
マニュアル化できるレベルの仕事しかできないって自虐だろ
2019/02/21(木) 12:40:21.42ID:tE5CGhgad
1.質問に回答する。
2.質問者から、「その場合だと〜が上手くいきません。」と返事。
3.その場合は〜すれば良いと回答する。
4.質問者から「それだと〜」...
5.2-4を何度か繰り返す。
6.質問者に「そもそも君はその処理で何をやりたいんだ?」と聞く。
7.質問者の返事を聞いて、結局質問者の設計が糞だったと知る。
8.1-7をを何度となく経験してると、質問を見た時に設計の糞さ加減がかなりの確度で予想できるようになる。
9.質問者の聞いてることだけ回答すると糞設計のせいでドツボに嵌まるので聞いてることだけ回答するのは辞めようという結論になる。
10.質問者は自分の糞設計に気付かないので、質問にだけ回答すれば良いのにと思う。
2019/02/21(木) 16:01:26.14ID:EV12A9vO0
こうやって質問者をひとくくりで決めつけちゃうような視野が狭い人が一番の癌なんだよな

バカほどなんでも決めつけて単純化させようとする
勝手に単純化させた結論を赤の他人にいきなり押しつけるから当然理解されない
理解されないことを相手がバカだからと決めつけていきなり罵り出す
頭がおかしい人なのかな?と放置されると論破して黙らせたと思い込んで悦に浸り出す
そしてプロ回答者としての自信を増して増長して居座る
2019/02/21(木) 16:10:32.99ID:7HScUEGsM
大抵の事務仕事は本来単純なことをわざわざ難しくして仕事を作っているだけなのは事実だね
VBAや最近だとRPAのような小手先の自動化ツールのは、本質的なプロセスの見直しに対するモチベーションを削いでいる面もある
2019/02/21(木) 16:23:50.23ID:YsIQ3BIo0
営業はそれが売上に繋がってると信じてやまないので、
どうにもなんないのよ〜
2019/02/21(木) 18:36:57.10ID:tE5CGhgad
>>384
お前が碌に回答したことが無い初心者なだけだろ。
いろんな所で回答してる奴らは皆同意する。
2019/02/21(木) 18:47:24.87ID:7HScUEGsM
>>387
同意するわ
明らかに知識の乏しい初心者が妙に具体的に手段を特定して助けを求めてきた場合、
「そんなことはどうでもいいから目的を教えろ」と対応するのが最も確実で効果的で手っ取り早い
2019/02/21(木) 18:56:23.16ID:YsIQ3BIo0
>>383
>8.1-7をを何度となく経験してると、質問を見た時に設計の糞さ加減がかなりの確度で予想できるようになる。
この辺りになると回答でイライラする事が無くなるゾ
2019/02/21(木) 18:57:24.28ID:ZuxKbWfpM
>>384
お前が決めつけててワロタ
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次元配列でシート丸ごと持ってきてから入れてく感じにしたんだけど、ここにいる人達はどう書く?
392デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/21(木) 19:30:43.16ID:UHF1Q6o+0
データ取得は別プロシージャにして配列につっこむ
2019/02/21(木) 19:43:21.62ID:YsIQ3BIo0
caiiってcallの事か
>>392が綺麗と思うけど、大抵>>391ぐらいで終わる
394デフォルトの名無しさん (ワッチョイ 89c5-T+SP)
垢版 |
2019/02/21(木) 19:53:49.02ID:dFUlMofS0
>>391
おまえプロさんか?
まだプロさん予備軍やったら気いつけや
そこからプロさんに堕ちるんはあっちゅう間やで
2019/02/21(木) 19:57:47.93ID:EV12A9vO0
>>387
さすがプロ回答者の鏡
嫌なら別に回答者なんてやらなくてもいいんだよ?
質問者をひとくくりに見下すようなひねくれ者になってまでプロ回答者をやり続けてる目的ってなに?
こんなとこで他人を見下してなきゃ自尊心保てないとかそんな感じ?
2019/02/21(木) 19:58:58.69ID:YsIQ3BIo0
>>395
回答も質問もしないならさっさと消えて
2019/02/21(木) 20:03:08.56ID:mRRRBv2X0
>>384
こうやって回答者をひとくくりで決めつけちゃうような視野が狭い人が一番の癌なんだよな


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

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

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

【作業前の状態】
【終了時の状態】
【何がわからないのか】
【作業の頻度(一回だけ or 何度も)】
2019/02/22(金) 05:05:38.47ID:+/kCrfoP0
データ量も欲しいなあ
1万件なら雑コード、100万件なら処理速度も意識してコード書く
408デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/22(金) 09:18:19.59ID:OJD9m6ZlH
あんまり敷居を高くすると質問者が減るよ
2019/02/22(金) 09:36:13.35ID:tzlpYPDLx
質問者が減れば珍回答で恥をかくリスクも減って回答者のプライドが保たれるので問題ない
410デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/22(金) 09:46:06.70ID:OJD9m6ZlH
>>409
そう考えてるのはお前だけだよ
411デフォルトの名無しさん (ワッチョイ 6a90-rusg)
垢版 |
2019/02/22(金) 09:53:52.37ID:HFM6F1Kc0
まぁプロ回答者どもが罵り合いやってますが、質問者の方はそんなの気にせず
どんどん質問してくださいな w
2019/02/22(金) 10:30:26.16ID:1cZDvNG50
>>408
どうすればいいか提案してくれ
2019/02/22(金) 16:26:24.07ID:brEIpzdG0
このスレの本質はプロ回答者選手権だからな
プロ回答者の敵はプロ回答者
質問者など餌に過ぎない
その餌を誰が一番上から踏み潰すかを競い合う

ちなみにプロ回答者にもなると質問に答えたりしない
2019/02/22(金) 16:41:48.96ID:1cZDvNG50
>>413
なるほど!
まさに>>413さんのような方ですね
2019/02/22(金) 16:46:43.90ID:8DxZ0bMn0
なるほど
プロ回答者ってのは「質問スレにおける回答活動」のプロって意味か
2019/02/22(金) 20:37:47.33ID:O594Y42ea
まぁ別に目的の記述は無くてもいいけど
何を目的にしているかの記述があれば
代替案考えてくれる人もいるだろうし
欲しい解答が得られやすい場合もあるわな

逆に余計なこと言って欲しくないのなら
書かないのも有りだと思うけど
解答者がゲスパーして答えるのも
また有りだと思うし
2019/02/22(金) 20:44:37.13ID:O594Y42ea
>>400
ループから抜けるのは>>401の人が言う通り
Exitを使えばいいけど、次のループに行くような
.Netで言うContinueはないので
分岐でループしているロジックの最後に持って行くしかないんじゃないかな?
2019/02/22(金) 21:01:06.12ID:Pvmgb/R80
ここの質問を見ると、よほど変なもん作らされてるんだろうなって思う。
何に使うのかわからないようなのが多くて、
実務で使いそうなのがあまり出てこない。
2019/02/22(金) 21:23:19.91ID:yyymEZ9cM
実務では文字列解析とデータベースからの検索程度で難しくは無いんだけど
適当に組んだせいか妙に遅いのが悩み
高速化するテクニックとかないかな
2019/02/22(金) 21:42:30.22ID:+/kCrfoP0
>>419
VBAを捨てる
2019/02/22(金) 22:11:55.73ID:moZ6n3ck0
>>419
早いpcに買い替える
2019/02/22(金) 22:45:12.67ID:Pvmgb/R80
二重Forループ
 ↓
VLOOKUP
 ↓
高速VLOOKUP
 ↓
SQL

これより速いのって、やっぱアセンブラ?
2019/02/22(金) 22:46:15.97ID:Pvmgb/R80
アドバンスフィルタが抜けてた。
2019/02/22(金) 23:22:12.68ID:Ig/cWVtXM
>>422
インデックスを張ってSQLでJOIN
オンデマンドなトランザクションじゃなくて単発の巨大なバッチならHiveとか使うのもいい
2019/02/23(土) 01:23:52.97ID:CTQXI+x50
エラーがわかりにくいのがいちばんのストレス
そのほかにも可変長引数とかジェネリクスとかwithの糞文法とか短絡評価未搭載とかインターフェイスが歪んだ設計になるとか色々遅れすぎ
所詮底辺が一発ツールで使う言語
2019/02/23(土) 01:28:03.84ID:M/apCBqcx
短絡評価がないせいでネストを深くせざるをえないときがあるんだよね
2019/02/23(土) 04:42:29.90ID:GIBqdFBY0
短絡的なVBerは多いのにな
2019/02/23(土) 07:16:01.49ID:F2VDrfwR0
>>425
その辺は仕方ない
C#やRubyやってる人がJavaは糞だって言ってるのと大差ない
2019/02/23(土) 09:04:33.17ID:Cm202fZQ0
>>425
エラーチェックは本当にな
これでforが無いって言われる。本当にないのはもちろnendif
さすがにもう迷う事は無いけど、
初心者の頃は散々苦しめられた

Sub foo()
For i = 1 To 10
If True Then
Next
End Sub
2019/02/23(土) 09:20:01.07ID:CvvsLWYy0
エラーってコードのエラーのことか
実行時のことかと思った
2019/02/23(土) 09:21:13.09ID:Cm202fZQ0
あぁ、実行時エラーの可能性もあるか
あれはactiveにしてないsheetのcellをselectした時はハマったけどそれ以外は特に・・・
2019/02/23(土) 09:21:56.77ID:CvvsLWYy0
唯一(?)の短絡評価である Select Case のリストはクソだと思いながらたまに使う
433デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/23(土) 10:29:43.91ID:AFk0uxx90
短絡評価ってなんですか?
2019/02/23(土) 10:35:04.36ID:sW0ZRaO0a
>>433
お前がGoogleの採用選考を受けても学歴で足切りされて職務経歴の中身すら見てもらえないだろ?
結果が決まってるのに余計な評価をするのはリソースの無駄だからだ
そのように、評価が確定した時点で残りの評価を省いて結果を出す戦略を短絡評価という
2019/02/23(土) 10:49:47.77ID:CvvsLWYy0
>>434
GoogleはOr評価かもしれないよ
436デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/23(土) 11:44:31.84ID:AFk0uxx90
>>434
お前バカだな
Googleは学歴より経歴重視だよ
2019/02/23(土) 12:14:20.39ID:yEreZVJRM
>>436
低学歴にも凄い経歴の奴はいるが、高学歴の中にはもっと沢山いるんやで
採用のための人的リソース最適化問題に対する戦略として、学歴フィルタが有効であることは十分に証明されている
438デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/23(土) 13:07:59.71ID:AFk0uxx90
>>437
履歴書と職務経歴書って同封して送られてくるんだから同時に見ればいいじゃん
それとも30秒くらいの時間を惜しんで職務経歴書読まずにお祈りするの?
大した戦略だねw
2019/02/23(土) 15:21:22.50ID:yEreZVJRM
>>438
学歴なら人が見る必要すらないでしょ
書類選考のコストは一桁違うかと
2019/02/23(土) 16:24:43.18ID:UPmGtBeI0
>>438
たかが30秒と言う奴は10,000件あったら何時間かかるかを考えてからレスしろ
441デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/23(土) 18:43:00.90ID:AFk0uxx90
Googleはそもそも学位が必要ない時点でお前らズレてんだよ
2019/02/23(土) 19:03:21.30ID:FI/m1MnA0
うんむ
2019/02/23(土) 19:33:38.12ID:to9UN42C0
ただの例にここまで突っ込むか?
2019/02/23(土) 20:37:03.99ID:CvvsLWYy0
短絡評価の例としてはわかりやすかった
2019/02/23(土) 22:13:21.58ID:CTQXI+x50
配列をインラインで生成する方法でもあればいいのに
2019/02/23(土) 23:20:45.04ID:E54ZDPfM0
>>400
ブレイクは >>401
Continueは、Nextの前に例えば CONTINUE:とラベル付けて、Goto CONTINUE で代替可。
これで何も過不足ないし、意図を読めないやつは(周りに)いないので、しょっちゅう使ってる。
447デフォルトの名無しさん (ワッチョイ b501-eSdf)
垢版 |
2019/02/24(日) 04:42:51.56ID:ZjoVn9Sx0
goto使うと負けた気分になるけどネスト深くなるくらいなら使う
2019/02/24(日) 10:14:59.06ID:PMakJCH00
>>445
そういう関数を作れば解決する話では?
2019/02/24(日) 11:16:37.13ID:x1+EfWpB0
昔から言われてるけどGoToとかExitみたいな無条件ジャンプはできるだけ使うべきじゃない
ループから抜ける条件が複数ある時は、条件判定部分を関数にして外に出せばたいがい解決する
2019/02/24(日) 11:20:53.15ID:UtSvB3y70
>>449
3重構造のFor文とかって、いちいち全部のFor文に条件を書くんか?
2019/02/24(日) 11:27:07.38ID:cR8EPyISM
下向き限定なら許す
バカみたいな脱出フラグ使われるよりよっぽどマシ
上向きgotoは死ね
2019/02/24(日) 11:31:30.55ID:UtSvB3y70
>>446
VBAにはなんでContinueがないんだろうな
これ、ほんとめちゃ不便だわ。 これのためにもgotoは使ってるわ。てか、必須になっている
2019/02/24(日) 11:34:47.34ID:UtSvB3y70
Forの3重構造の場合、例えば、i, j, kで回したとき、一番中の処理で、
i=10000
j=10000
k=10000
とか設定したら、全部抜けるという技は使ったことはあるが、Next k の次に処理があってNext jとかってなってるときは
やはりgoto を使うので、結局こういう技は使わなくなった
2019/02/24(日) 12:03:06.64ID:laz54YR/0
for、特に二重ループから抜ける時はgotoで良い
if flg then exit for
こんなもん何個もあったら余計見づらいし間違う

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

>>45
20年前の言語で全く進化してないからな
python2.x→3.xの悪夢を見た者としてはこれはこれで良い
2019/02/24(日) 14:56:48.98ID:eghZe4V2x
Case (i) ⊇ Case (j) ⊇ Case (k)....っていう感じの線形の包含関係が無条件に成り立たない限り、3次元以上のループ管理はややこしくなるだけだよな
2019/02/24(日) 15:43:11.74ID:Jr9LmcmNd
>>429
それに苦しめられたのはお前が悪い。
きちんとインデントする自分なりのルールがあればそんなことには最初からならない。
2019/02/24(日) 15:50:41.15ID:Jr9LmcmNd
三重のル―プで条件によって全部から抜けるって処理自体あんまり無いだろ。
設計が悪いんじゃないの?
2019/02/24(日) 16:01:32.16ID:laz54YR/0
>>456
>それに苦しめられたのはお前が悪い。
どう見てもvbaのエラーチェックがしょぼすぎる
少なくとも>>429みたいなエラーチェックはあり得ない。あっても修正される

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

全セル(usedrange)に処理をかけて特定条件で抜けるというのは何度かあるな
ただまぁ別に抜けんでもそんあに変わらないというのもあるけど
2019/02/24(日) 16:43:43.47ID:EsuDtWv80
エラーがわかりにくいという話に
エラーを出すおまえが悪いとマウント取りに行くプロ回答者

マウントがとりたくてやってるのか本当にただのバカなのかどっちなんだろ
2019/02/24(日) 17:14:34.21ID:PMakJCH00
まあでも多重ループから一気に抜ける方法がExit Function/Sub しかないんだから
ループを含む部分をサブルーチンとして切り出す以外あるまいよ
2019/02/24(日) 17:42:50.42ID:RNHs4bDba
ループを回す以上はループを回す理由があるはず
その理由をわかりやすい関数名にしてループを切り出す
途中で抜けたければExitする
2019/02/24(日) 17:45:18.70ID:DRTFUInr0
いや、doとfor組み合わせれば二重ループ、三重ループからも抜けれるよ。
実用性は置いといて。
2019/02/24(日) 17:54:50.07ID:+Nxplz4k0
>>454
N88さわってたからループからgotoするのは違和感あるわ
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番目をよく使う。(もちろん仕様で決まってるならそれ優先。賛否について議論はしない)
2019/02/24(日) 18:39:00.05ID:L3+XvQB40
いつまで経ってもほったらかしにされてるVBAが悪い
Pythonがどうたら言う話はどうなった
2019/02/24(日) 19:22:57.41ID:PMakJCH00
資産が多すぎて移行不可
2019/02/24(日) 22:11:47.76ID:Jr9LmcmNd
>>464
最後の奴を使う。
インデントで明らか。
というか、そんなエラーを出すこと自体無い。

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

ちなみにその最後の奴ならIfとEndIfを書いてからExit Forを書く。For Nextの場合も中身は後だ。
染み付いてるんでね。
別にそういう書き方をすべきと言ってるんじゃない。
エラーにすぐ気付くなら何も問題は無い。
2019/02/25(月) 05:22:32.65ID:+5CiRMIi0
PythonAという新しい言語が誕生します
2019/02/25(月) 09:04:42.27ID:8UCufaEGM
VBAって遅い?
セルにもの入れると遅くなるって以外で全般的に。
2019/02/25(月) 09:16:19.92ID:RXoXH9qp0
>>469
遅い
どうしてもエクセルが枷になる
大規模な計算をしたいならvbaは避けたほうが無難
2019/02/25(月) 10:41:49.47ID:8lMUk5exM
純粋な数値計算部分は遅くはないんだけどね
シートアクセスが遅いのはまあ
2019/02/25(月) 12:13:02.41ID:lRskRR3f0
>>469
ようするにVBの部分の話か?
変数の大ニュースとかループとか、配列のメモリ確保とか
2019/02/25(月) 12:31:17.59ID:iOBpdHSUd
確かに遅いんだけど、遅いと言ってる奴の大半はそいつのコードに問題があるような気がする。
コード変えたら100倍速くなったとかざらだし、VBAが遅いせいでと感じることは殆ど無い。
遅い場合でも処理を考えたら仕方ないと思える場合が殆ど。
2019/02/25(月) 12:42:50.70ID:iOBpdHSUd
>>471
純粋な数値計算部分が遅いと思うよ。
だからAPI使ってマルチスレッドのコード書いても処理が追い付かなくなる危険性があるわけで。
ただ、そんなの遅いと感じるようなものじゃないし、遅さが気になったら自分のコ―ドを疑った方が良い。
2019/02/25(月) 13:56:48.78ID:avG/zv9MM
裏で動かせるなら、処理遅くても他の作業してればエエねん。
終わったら、アイコン点滅して教えてくれればエエねん。
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/
2019/02/25(月) 19:16:52.45ID:fA1JAyF+0
>>476
kakaku.comなら「この検索結果を友達に知らせる」から直リンの情報が得られて、そこにページ番号も書かれてるからVBAだけで全データを取得できる
2019/02/25(月) 19:23:27.43ID:v0J7eUlyx
javascriptでページ情報を適当な外部ファイルにダンプして後でvbaでまとめて読み込めば良いだけでは?
2019/02/25(月) 19:42:45.75ID:RXoXH9qp0
変なページはキーボードマクロでやったほうが手っ取り早い場合も
2019/02/25(月) 19:47:45.89ID:+5CiRMIi0
>>477
こんな方法があったんですね!
ありがとうございます
getの形で見ることができるんですね
これならfor文でまわせそうです

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

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

こんな感じ。仕様を把握してから書いたほうが絶対に早い
2019/02/25(月) 22:46:07.98ID:TP8zPbuZ0
>>448
オーバーロードってあったっけ?それに、ジェネリクスがないから全部の定義されてる型について生成しなきゃいけないから地獄なんだよ!リテラルで配列を生成できたらいちいちDimしなくてもいい
2019/02/25(月) 22:51:30.74ID:TP8zPbuZ0
ちなみに、望むシグニチャーはこんな感じ
' T = Generic
Public Function ArrayOf(/* vararg */ element As T) As Array<T>
どうせVBAは浮世離れしすぎてて書けないけどな!
2019/02/25(月) 23:00:26.05ID:F8HPsJ9/0
ジェネリックはないがヴァリアント型つかえば良いのだよ

無いものねだりしてもしょうがない
問題解決のためにあるものを使うだけ
2019/02/26(火) 06:28:56.69ID:QryMFy3y0
>>429
これ。面白いな。試していないが、頭から見て行ってまずForが出て来るのにForがないって言われるの?w

VBAも構文を修正するのはいろいろと問題があるだろうけど、こういうペリフェラルな部分では改良できるところは
いくらでも残ってるよねえ
2019/02/26(火) 06:39:06.54ID:QryMFy3y0
構文チェックくらいなら、どっかサードパーティが作ってアドオンとか出来ないのかな
xlsファイルの中からプログラム文ってテキスト抽出って出来ないんだっけ
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
 }
みたいな感じになってる
2019/02/26(火) 07:22:50.54ID:Dl2cSn2NM
>>489
やれるやれないという意味ならやれる
そもそも*.basとか*.clsとかにエクスポートしたらテキストファイルだし
セキュリティの設定はいるけどCOM経由ならそんなに難しくない
ただ>>429みたいなケースでわかりやすいメッセージを出すのは思ったより難しい
2019/02/26(火) 07:28:56.02ID:wxY2HVgtM
>>487の言うとおりだ
生成もジェネリックに出来ないが使う方の関数だってジェネリックは出来ない。
つまりVariant を避けてると型別定義地獄になるって事だ
2019/02/26(火) 12:32:40.78ID:5MxkS3P70
>>476-482
wget は簡易クローラーだから、これで複数ページをダウンロードすれば?
その後、vba で処理すれば?

まあ、適度に時間をおきながら、アクセスしなよ。
頻繁にアクセスすると、営業妨害で逮捕されるかも
2019/02/26(火) 17:27:28.56ID:8+gQOZAja
win10(64bit)にoffice2013(32)入れたら動作おかしくなったので
新しいoffice買ってきた
2019/02/26(火) 21:19:16.14ID:bIfQynSTx
bitsadmin.exeやPowerShellを使う手もあるな
2019/02/26(火) 21:29:55.31ID:7VOH1icT0
Variantか…型安全をぶち壊してる気がするけど…
2019/02/26(火) 21:52:08.87ID:3hFiWozk0
>>496
いいんだよ

型安全な汎用プログラムを書けない時点で、個別のプログラムを型安全にする気は失せるというものだ
2019/02/26(火) 21:57:39.80ID:tGZ/aMnha
>>493
有料のRPAツールを使ってもダメなんでしょうか?
2019/02/26(火) 23:46:14.88ID:VNg9bOSA0
暗黙の型変換が拡大縮小の両方に効く時点で型安全なんてあり得ないわけで
2019/02/27(水) 03:06:02.10ID:s/3R2a1B0
vbaで型安全ってなんのギャグだよ

Sub foo()
Dim bar As Long
bar = 1 & "0"
msgbox bar
End Sub
2019/02/27(水) 06:45:27.86ID:OKB4dgT5x
>>500
これって 1 & "0" のところが 1 + 0 と評価されて出力が 1 になるのか?
502デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/27(水) 09:24:25.27ID:94mgNWr4H
数値を“”で括って連結させるって普通はやらないよな
もはやクレーマーの域
2019/02/27(水) 09:27:38.25ID:ev0DPtJU0
>>501
ならない。

---------------------------
Microsoft Excel
---------------------------
10
---------------------------
OK
---------------------------
2019/02/27(水) 10:08:05.65ID:TCTVEEoa0
>>502
アホはお前
505デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/27(水) 10:14:24.05ID:94mgNWr4H
>>504
自己紹介かな?
2019/02/27(水) 10:21:18.29ID:TCTVEEoa0
>>505
本当、馬鹿は食いつきがいいな。エラーも起こさずに動くのが問題なんだよ。
馬鹿には難しいか?
2019/02/27(水) 10:48:04.11ID:hD6s3+cfM
&演算子が勝手に文字列に変換するのは利便性考えたらわかるし
Long型の変数に文字列代入する時に暗黙のキャストするのもわからなくはない

けど警告ぐらいは出してほしいね
508デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/27(水) 10:48:12.18ID:94mgNWr4H
>>506
それはエラーであってほしいというお前の願望だろ
2019/02/27(水) 11:32:27.96ID:WN1Wln/+0
VBAにも当然、厳密な構文ルールは存在するだろう

数字 & 文字列は文字列にするってのがルールじゃね。 一度覚えたらそれでいい
2019/02/27(水) 11:45:10.68ID:K1qNq431M
& が + に解釈されたらたまったもんじゃない
2019/02/27(水) 12:38:47.93ID:JcvtiT+vd
>>497
Variantは意識して使う。
型安全も意識する。
当然、暗黙の型変換でどうなるのかも意識して組んでいれば、そうそう問題になることもあるまい。
2019/02/27(水) 12:41:38.23ID:JcvtiT+vd
どんな言語でもツボは有るわけでね。
押さえてコードを書けない奴がアホなだけだろ。

初めて触った初心者じゃあるまいし警告なんて全く必要無い。
2019/02/27(水) 13:03:51.61ID:aJqXXkY2d
>>509
代入先が数値だろ
2019/02/27(水) 13:08:23.01ID:OA+HeXxoM
同じマクロを使っている複数の文書があって、マクロの一部を修正したいんですが、
別ファイルのモジュール内の変更を行うマクロは VBA を使って書けますか?

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

実際はワードでやりたいことですがワードVBAスレがなさそうなのでこちらで質問しました。
Normal を書き換えて対応するというのはできない前提です。
2019/02/27(水) 13:17:59.19ID:aJqXXkY2d
>>514
スレ一覧よく見てみろ。そういういい加減で他人にすぐ聞くからできないことだらけなんだよ。
2019/02/27(水) 13:19:02.81ID:K1qNq431M
ByRef x As Variant
517デフォルトの名無しさん (JP 0H2e-eSdf)
垢版 |
2019/02/27(水) 13:19:50.19ID:94mgNWr4H
>>514
書けるよ
2019/02/27(水) 14:41:22.10ID:+oDGw9vfM
>>503
Option Explicit付けてもエラーにならないのかな?
2019/02/27(水) 15:47:12.82ID:WN1Wln/+0
>>510
お前は何を言ってるんだ?
& は文字の連結子だろ。 だから、文字としての1と0を連結したんだよ
>>513
代入先は数値だな。 文字処理をしてそれがVariantだからそれから数値変換したんだな
文字処理が優先なんだろ
2019/02/27(水) 15:48:15.94ID:WN1Wln/+0
>それがVariantだから
すまん。これはなし

まあ変な構文ではある
2019/02/27(水) 16:29:49.69ID:K1qNq431M
>>519
だから連結じゃなく加算と解釈されたらたまったもんじゃない
と言っている
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とかやってると両方が文字列の時にはあ?ってなことになったりする
2019/02/27(水) 18:25:55.24ID:hD6s3+cfM
>>522
>"2" + "1" ⇒ "21"
&、-と合わせて考えるとめちゃくちゃ気持ち悪いなこれ
2019/02/27(水) 18:25:56.15ID:U+okKr8Fa
出力する時以外に文字列と他の型を演算させる需要ってあるか?
すごい変なプログラム書いてそう
2019/02/27(水) 18:31:15.76ID:hD6s3+cfM
>>524
Cells(1,1) + Cells(1,2)
とか気軽に書いて文字列セルなのに気づかず発狂するがいい
2019/02/27(水) 18:45:49.28ID:U+okKr8Fa
>>525
セルの値同士の計算をダイレクトにやろうとする発想にまず疑問を感じる
2019/02/27(水) 18:48:38.08ID:JcvtiT+vd
だから、型を意識してコード書かない奴は駄目なんだ。
あと、Cells(1,1) + Cells(1,2)じゃなくて、Cells(1,1).Value + Cells(1,2).Valueとすべき。
2019/02/27(水) 18:53:54.71ID:sssEi30aM
>>524
セル値が16進で、その値で計算させるとかかな。
昔はよく使ってたが、最近は使わなくなったな…
2019/02/27(水) 19:19:30.96ID:s/3R2a1B0
>>527
いや、そこじゃない
cellsのデフォルトプロパティがvalueな事ぐらい皆分かっている
valueの型がヤバイんだ
2019/02/27(水) 19:31:13.45ID:zqU1UpTE0
>>527
> だから、型を意識してコード書かない奴は駄目なんだ。
そんなのわかってるからいちいちマウント取りに来なくていいよ
世の中には変数宣言すらしないやつとかもいるし使い捨てコードとかもある
2019/02/27(水) 19:35:36.50ID:kQabADAE0
本当によくできたプログラムっていうのは変数がどんどん減っていくものだよ
2019/02/27(水) 19:49:19.80ID:J+jPuAvg0
やっぱVBAってクソだわ
2019/02/27(水) 19:52:19.85ID:Vhp/GCq70
>>532
と罵りたいだけが為にここに来るんだろ?  プ
2019/02/27(水) 20:02:27.43ID:J+jPuAvg0
やっぱVBAスレってクソだわ
535デフォルトの名無しさん (ワッチョイ 89c5-T+SP)
垢版 |
2019/02/27(水) 20:17:03.40ID:INBREE+00
クソレスすんなプロさん
2019/02/27(水) 21:22:24.52ID:rA0fzWNE0
>>531
デバッグはやりづらくなるけどな
2019/02/27(水) 21:48:46.20ID:WN1Wln/+0
まあやっぱり、1 & "0" とか  "2" + 1
とかが出てきたら、エラーで落とすのが普通だろうなあ
で、プログラマはそこで、Val関数で数値にするとか逆に文字列にするとか
やっぱり型変換、確認をプログラムの中に入れながら作るのが本来の筋だと思うわ
そもそもの構文を変えないのであればね
2019/02/27(水) 22:04:09.28ID:6/kMoeDHa
どうでもいいよ
所詮VBAだし
2019/02/27(水) 23:43:00.80ID:APPBNRQYM
>>538
そういうこと
540デフォルトの名無しさん (ワッチョイ 1feb-IBRN)
垢版 |
2019/02/28(木) 00:41:55.86ID:ULaFt4eB0
質問です。お願いします。

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

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

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


こんな感じでいちいち確認したいです。
2019/02/28(木) 00:46:39.13ID:3O1mZe4/0
>>540
dim st as single, ed as single
st = timer
(処理)
ed = timer
debug.print ed - st & "sec"

いつもこんな感じでやってる。
2019/02/28(木) 00:47:31.02ID:CZa6uBrL0
Debug.Print Now でもしとけ
2019/02/28(木) 00:51:18.30ID:ULaFt4eB0
>>541
ありがとうございました!
2019/02/28(木) 01:23:05.26ID:8R6HTxA70
変数の型はトレースの時だけでもシンタックスハイライトして欲しい。
それか左辺に合うように強制キャストで。
2019/02/28(木) 02:06:55.62ID:u4sOxAKE0
>>540
早くなってもわかりにくいのはやんない方がいいぞ
546デフォルトの名無しさん (ワッチョイ 1feb-IBRN)
垢版 |
2019/02/28(木) 06:51:30.57ID:ULaFt4eB0
お恥ずかしい質問ですが、もうひとつお願いします。

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

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

みなさん、どうしてmsgboxよりそっちを使うんですか?本当にそっちが便利なんですか?
547デフォルトの名無しさん (ワッチョイ 9701-j5yB)
垢版 |
2019/02/28(木) 06:56:12.35ID:PI/gJuny0
>>546
msgboxだと毎回画面が出ちゃうから
2019/02/28(木) 07:04:09.83ID:TTqJ1VR80
Debugって俺も使ったことないんだが、過去何行くらいまで遡れるの?
それとその結果ってファイルに出力できる?
2019/02/28(木) 07:09:57.92ID:syDDbQ630
自分はstopとローカウルィンドウ派だな
2019/02/28(木) 07:10:06.15ID:3O1mZe4/0
>>546
OK押すのメンドいし、押したら消えるし。
Printならイミディエイトウィンドウにどんどん溜まっていくから比較しやすいし。
VBE上でCtrl+Gで呼び出せる。
コード書くときは常に表示してるな。
他にもいろいろ便利に使えるからGGってみて。
2019/02/28(木) 07:28:40.77ID:/X5EyKzha
debug.printなら開発画面を見ない他の使用者が
気付かないで済む
2019/02/28(木) 08:31:53.34ID:3CdGs56rM
>>540
ちょっと本格的にやるなら…
https://blogs.yahoo.co.jp/yangzh_jp/26557113.html
注意!
中にも書いてあるけど使用時にコードを改変するから使うならバックアップはちゃんと取ること
2019/02/28(木) 12:28:10.25ID:wbPQJw42d
>>531
そうとも限らない。
速度の為に変数増やすこともあるから
2019/02/28(木) 12:32:41.06ID:wbPQJw42d
>>548
そんなに大量には残らないね。
1000行くらいか?
大量に残したいときは普通テキストファイルに書き出すだろ。
2019/02/28(木) 12:33:37.47ID:qWkUq+5ha
>>553
まああくまで傾向だな
システム開発に絶対はないから大まかに語るしかない

しかしまあプログラマって柔軟性がないから何か意見を言ったら必ず特殊な状況を想定して反論しようとする人が出てきて面倒くさいな
556デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/02/28(木) 13:23:20.67ID:qor22oN3H
柔軟性がある人は出世するからね
2019/02/28(木) 13:59:45.70ID:TjDXn6TQM
>>555
後々のテスト工程考えてるからじゃない?
そこまで考慮しなくても…となる気持ちは分かる
2019/02/28(木) 14:20:36.03ID:x4ZPjfd7M
考慮すべき場面とするべきでない、しても意味がない場面の判断ができないとも言える
559デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/02/28(木) 14:36:57.48ID:qor22oN3H
だから日本は開発が遅いんだよ
アジャイルでやれ
2019/02/28(木) 14:57:38.31ID:7AaSmpPf0
想定される状況なんか結局は本人にしか分からないし、説明すんのもめんどくさい
まあ本人が気付いてないこともあるけど
2019/02/28(木) 17:57:19.76ID:3CdGs56rM
>>555
決めつけで語って指摘されたら逆ギレかよ w
2019/02/28(木) 18:42:40.55ID:jqfgz8pY0
ーーここまで型変換関数なしーー

身内が意味がわかるっていうなら変換関数抜きにしてもいいかもしれない、けどコンテキスト的に関数噛ませたい
2019/02/28(木) 18:45:13.08ID:OctLDBwCx
Debug.Assertも割とよく使う
2019/02/28(木) 21:21:18.29ID:7AaSmpPf0
Variant使わなきゃいい
2019/02/28(木) 22:12:12.40ID:TWIU4lxdM
>>564
いやいやいやいや
ByRef As Variant
の意味論がわかってないだろ
2019/02/28(木) 23:20:59.71ID:JVzuLoidx
Variant型がないとそれはそれで不便
実行時にならないと変数の保持データの参照型やデータ構造が決定できないような関数を定義するときには必須
Object型では限界があるし、多態性とか考えたら特に
2019/03/01(金) 00:53:35.24ID:oijdm3qva
VBAにもInterfaceがあるの知らない人かな
2019/03/01(金) 08:24:19.03ID:KSyELWIpd
だから意識して使うぶんには良いんだよ。
Variant配列で高速化は良くやるだろ。
あるいはあえていろんな型を受け付ける関数を作る場合とか。

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

意味論というか、何処に書くかは内容で決める。その方が後でコード見る時に視認性も良くなる。
2019/03/01(金) 20:10:20.22ID:9ceAGmrya
俺ならスコープで書く場所変えてる
2019/03/01(金) 20:18:09.30ID:S/p2I5Nx0
シート1だけでしか使わない関数はシート1
その関数の中で使う関数で他でも使う汎用関数は標準モジュール
シート1のデータを加工ってあるが、それが将来にでも他のシートでも使いそうならその加工関数は汎用化して
標準モジュール。 シート1でしか使わないのならその加工関数はシート1に書く
579デフォルトの名無しさん (ワッチョイ 9f7c-L+km)
垢版 |
2019/03/01(金) 21:39:17.32ID:41cCIQF20
上級者の人がどう使っているかなんとなく解ったような気がします。とりあえず
【クラスモジュール】汎用性のある関数
【標準モジュール】 大きな処理
【シートモジュール】【フォーム】極力使わないが他と絡まない短いコードなら完結しても良い
という感じで試してみようと思います。
あとは関数名の最後に呼び出しする関数がある場所を付けてみようと思います。
何をやりたいかで構成も変わると思うのでそこらへんも加味しながら試してみます。
参考になりました、ありがとうございます!
2019/03/01(金) 22:34:27.56ID:KieDV9lDM
ここに上級者なんていないぞ
2019/03/01(金) 22:48:58.94ID:eQhW3/JV0
>>579
関数名の最後になにを付けるって?
2019/03/01(金) 23:05:06.38ID:jYXMQwAma
また一人、道に迷ってしまった
やっぱりVBAで勉強するのは非推奨ダナ
2019/03/01(金) 23:30:05.02ID:zWZoP6hm0
>>546
俺もmsgbox。
イミデは、知らないうちにウインドウが消えちゃうから。
プロパティもそう。
何で勝手に消えるんだろ。
2019/03/02(土) 01:21:31.95ID:Po9hNmd9x
>>579
汎用性のある関数を記載する場所だけど、VBAの仕様ではクラスモジュールではなく標準モジュールの方が都合が良いよ
何故なら自作のクラスモジュールに記述した関数を呼び出す場合、その自作クラスのオブジェクトのインスタンスを生成した後にそのオブジェクトのメソッドとして書くという手間が要る
つまりマシンメメモリの無駄食いになるしコーディング量も増える
標準モジュールならば関数名を書くだけで呼べるので余程気楽

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

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

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

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

本来の出力でない余計なカラムはノイズになって邪魔
名前で管理したい項目が増えたらノイズだらけになってなにを説明したい表なのかわからなくなる
2019/03/02(土) 10:57:15.96ID:ZJ+HN4z+0
visual studioに慣れ切ってしまってるのでVBAエディタがマジで苦手・・・
2019/03/02(土) 11:26:41.59ID:PSsyx6QoM
>>593
VBAでワークシート関数を作るのは否定しないよ
最悪なのはワークシート関数(VBA含む)でできることをVBA内でループ回す馬鹿
2019/03/02(土) 11:40:34.50ID:heck9gfNa
>>595
こ文脈でループを回すの意味がわからないしどっから出てきて何を意味してるんだ?
2019/03/02(土) 13:55:25.27ID:WupyvY1Q0
話変わるがセルのコピーとか移動したときに条件付き書式が壊れてやたら重くなって直すの苦労したことある
2019/03/02(土) 15:18:36.62ID:EfeqCtIS0
お前らまず、
ワークシートの機能を活用する
というのをどういうことかちゃんと合わせてから話してくれるか
2019/03/02(土) 18:22:41.70ID:BmvnLX83x
>>598
ワークシートの機能ってのはワークシートの機能一般のことでしかないだろ
ワークシートの特定の機能を想定して話をしてるんじゃない
ワークシートの機能を使えば事足りる処理をわざわざVBAのスクラッチでやろうとするのは車輪の再発明の極みだという話
2019/03/02(土) 19:24:09.91ID:PK2Geudt0
ワークシートって言いすぎww
Withでまとめたくなってきたわ。
2019/03/02(土) 19:30:50.79ID:6n8BrDHBH
With ワークシート
.の機能ってのは
.の機能一般のことでしかないだろ
.の特定の機能を想定して話をしてるんじゃない
.の機能を使えば事足りる処理をわざわざVBAのスクラッチでやろうとするのは車輪の再発明の極みだという話
End With
2019/03/02(土) 20:23:41.79ID:VydunwR60
ワークシートの機能って単独のワークシート関数で実現できることなの?
それをVBAでやるのは確かに馬鹿らしい。
そうじゃないならVBAのほうがいいな。
2019/03/03(日) 01:17:47.50ID:5kU0Dorz0
>599
だからワークシートの機能一般ってなんのことを言ってるの?
セルの計算式?
計算式用のワークシート関数?
Application.WorksheetFunction?
2019/03/03(日) 03:16:39.28ID:1gVEOeax0
VBA以外のExcelで出来ること全てだろ
理解力低過ぎないか?
2019/03/03(日) 11:57:08.93ID:XBWTxj+a0
なんでVBAを外すのか分からない
このスレにいる連中ならワークシートにはイベントも含まれるという感覚の方が普通でしょ
2019/03/03(日) 12:44:05.38ID:87SKey7q0
シートを方眼紙だと思っている人の視点での機能一般だろう。
ここの人たちは、クラスモジュールの1つくらいの感覚かもしれんが。
607デフォルトの名無しさん (ワッチョイ 377c-vuRV)
垢版 |
2019/03/03(日) 14:18:18.29ID:ilhG1tLW0
そこはかとなく臭うというか湧き出るダサさが嫌い
2019/03/03(日) 18:57:15.36ID:dGd12yAna
EXCELの全ての機能のうちVBAを除いた残りってことじゃね
2019/03/03(日) 19:26:33.74ID:2dKZwCIHx
エクセルのオブジェクトモデルでメソッドが提供されてるような機能をわざわざVBAでスクラッチするなって意味もあるんじゃね
ListObjectオブジェクト(テーブル)の存在や機能を知らずに、同一列内のセル数式ほコピーの機能を自作するような話だろ
2019/03/03(日) 20:55:07.59ID:C10iXUczM
初心者です。わかる方いましたらお教えください。

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

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

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

まぁ俺は関数としか呼ばんけどな、ハハハ
vbaでワークシート関数使う時はそう呼ぶ
618デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/03/04(月) 11:45:46.92ID:gwy/L6iPH
>>617
2019/03/04(月) 14:30:16.31ID:TvaJY4yu0
関数とVBAと対比させてるのに勘違いする奴がいるとはとても思えないが。
いたらそいつはアホだよ。
2019/03/04(月) 14:32:37.46ID:TFGUk6BN0
>>619
馬鹿が恥の上塗りに来ましたよ、と
2019/03/04(月) 14:57:43.98ID:TvaJY4yu0
>>620
あらら、アホが恥の上塗りに来たよw
2019/03/04(月) 15:02:35.15ID:vFn2j9Kt0
vbaだし何でもええやろ
どうせ大事に至ることはない、争う程の事ではない
2019/03/04(月) 15:28:20.01ID:TFGUk6BN0
>>621
馬鹿はVBAに関数がないと思っているのか?
馬鹿は早く死ねよ
2019/03/04(月) 16:20:08.03ID:RuY9YBtCM
「文脈上USBメモリのことであるとわかるときはUSBでいい」

「そもそもそんな呼び方普段からするなよ」
2019/03/04(月) 18:20:48.65ID:FDpjfwBmM
わかるかどうか判断するのは読み手側だからな
書く側が勝手に略すのは読ませる気がないんだろう
2019/03/04(月) 23:23:23.24ID:dF1M3atd0
そういえばCD-ROM2をロムって呼んでたやついたな

これSUPER CD-ROM2だから
2019/03/05(火) 00:24:00.61ID:YDI1bFmR0
ID:TvaJY4yu0みたいな馬鹿がメンテできなくなるVBAを作る
2019/03/05(火) 00:37:29.46ID:yUBkGE+g0
jsのAPI使える人いる?
使い方がサッパリ分からない

https://docs.microsoft.com/ja-jp/office/dev/add-ins/excel/excel-add-ins-advanced-concepts
https://docs.microsoft.com/ja-jp/office/dev/add-ins/reference/overview/excel-add-ins-reference-overview
629デフォルトの名無しさん (アウアウエー Sadf-vuRV)
垢版 |
2019/03/05(火) 03:34:27.88ID:VDry4yCPa
馬鹿には無理
2019/03/05(火) 05:56:45.90ID:pou1Iepn0
>>628
見てきたけど、なんかすげえめんどくさそう。出来ることも見新しいことってほとんどないじゃん
普通のWin32APIとかやったことあるのか。そっち勉強した方が遥かにまし。 VBAでもやれるから
2019/03/05(火) 07:48:42.24ID:VSxyPtP8a
いやMacとかOffice Onlineで使えることに意味があるんだろ
まあOffice Online使うくらいならGSuite使うという企業が殆どだろうけどw
2019/03/05(火) 08:12:27.21ID:yUBkGE+g0
>>628
はこういう事だった
誰も使ってないのね
https://qiita.com/y__na_ka_ya_ma/items/2575e79248978ff7828d

>>629
自己紹介乙

>>630-631
もちろんやれることは同じ
jsで書ける事自体がメリット
googleSpreadsheetのマクロを移植する時に使える
一生に一回もないと思うけどな
2019/03/05(火) 08:56:53.06ID:K5flI6jox
Win32APIとOffice JavaScriptAPIどっちを勧めるかと聞かれたら今なら後者かな
後者の案件あるのか知らんが
2019/03/05(火) 12:20:11.68ID:IGhfqt8ja
そもそも全くの別物を比較してどうすんねん
2019/03/05(火) 12:44:55.98ID:bZMGULjeF
>>623
日本語が理解出来ないようだな。
VBAと関数を対比させているんだからここで関数と言ってるのは"VBAの関数"のことでは無いと解釈するのがまともな日本人だ。


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

>>625
文脈や、やり取りでVBAの関数なのかワークシート関数なのかを判断する必要があるのは>>66>>142>>172も一緒だ。
お前らと違って普通の日本人は文脈ややり取りから判断出来てるんだよ。
>>614のようなことを言い出すのはお前らのような頓珍漢な奴らだけだよ。
2019/03/05(火) 12:47:21.71ID:bZMGULjeF
>>142>>186>>448
も文脈で判断するな。
2019/03/05(火) 12:51:32.81ID:bZMGULjeF
>>634
正にその通り。
Win32APIではじめて出来ることがjsで出来るなら分かるけどね。
2019/03/05(火) 13:01:00.32ID:yUBkGE+g0
>>634
あぁやっぱりそうだよね
知識不足かと思って調べてしまったわ
2019/03/05(火) 13:14:26.63ID:YDI1bFmR0
ID:bZMGULjeF

マジモンのアスペルガーのキチガイ
2019/03/05(火) 13:18:51.34ID:yUBkGE+g0
jsアドインもう少しぐらい使われてるのかと思ったけど、
誰も使ってないようで安心した
641デフォルトの名無しさん (ワッチョイ 377c-nl/e)
垢版 |
2019/03/05(火) 13:32:20.37ID:YOwkwz810
Excel Python API とかも Excel.js Office.js とかと同じ扱いになる悪寒
2019/03/05(火) 13:36:30.59ID:yUBkGE+g0
>>641
ゲェッ
vbaはこの手軽さが最強の武器なのに、VSからアドイン作成とかあまりに残念すぎる
2019/03/05(火) 20:23:23.29ID:ruLmgCaM0
>>639
これだからアホは困る。
お前、出版社にはクレーム入れるなよw

https://www.amazon.co.jp/gp/aw/s/ref=nb_sb_noss?k=Excel+関数
2019/03/05(火) 20:34:12.08ID:ruLmgCaM0
URLエンコードしてなかったな。

https://www.amazon.co.jp/gp/aw/s/ref=nb_sb_noss?k=Excel+%e9%96%a2%e6%95%b0
2019/03/05(火) 20:39:11.81ID:yUBkGE+g0
逆引き系辞典はネットあると本当に使わない
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
このあとすぐに書き込みに参ります
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
2019/03/05(火) 21:32:38.87ID:WmyrgrGT0
どういうマクロかと言うと、IEを開いてリンクボタンをいくつか押して文字を引っ張ってきてIEを閉じるというのを何度か繰り返すものです。
リンク先を正しく閉じられていないまま次の回転に入っていることが稀にあるのです
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
2019/03/05(火) 23:41:58.62ID:b71Efr460
IE11からreadystateもbusyも使えなくなったとかどこかで見た
利用出来ないという意味ではなくて使い物にならないという意味で

なので移動後に表示されるタブ見つけたら、とか移動後に表示される文字列を見つけたらという条件で対処してるわ
2019/03/05(火) 23:46:48.59ID:yUBkGE+g0
ここでもIEかよ・・・
2019/03/05(火) 23:57:28.83ID:AE45wcOz0
逮捕されないように気をつけろ
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が使える
2019/03/06(水) 00:12:35.24ID:M8vFX/4l0
csvを読み込む手法はいくつかありますが以下のような場合どの方法が最適でしょうか
1行1レコードになっていない(セル内改行あり)
csvが複数ありそれをすべて読み込んで集計処理がしたい
普段はデータインポートやopenで1行づつ読み込んでいましたが1行≠1レコードだと難しいのかと考えています
2019/03/06(水) 00:17:18.56ID:0oqXehnm0
>>649
長文でわかりにくい環境にも関わらず教えて下さってありがとうございます
参考にして、これから開きたいリンク先のウィンドウタイトルと同じタイトルを持ったウィンドウがすでにあれば閉じるという風に書いてみます
下の方に書いてくれたコードも試してみます
本当にありがとうございました
また下らない質問者したらすみません

>>650
会社のパソコンが古いのでしばらくは大丈夫そうです
ですが重要なことなので覚えておきますありがとうございます
2019/03/06(水) 00:29:35.50ID:qZfNBEKA0
>>655
既存のウインドウを触るのは初心者にとっては結構大事だよ
閉じれてないのはQuitメソッドの前に次の処理が入ってしまってるだけだと思うから、
処理が終わったと思われる場所に自分でコードを挿入したらどうだろう
2019/03/06(水) 00:33:49.27ID:qZfNBEKA0
>>654
改行が含まれてるセルは""で括られてるという認識でいいなら、
丸ごと文字列として読み込んだ後に正規表現で""内の改行を全部改行コードに書き換えるのが良いと思う
2019/03/06(水) 00:36:57.21ID:qZfNBEKA0
>>657訂正
改行を全部改行コードに書き換える

改行コードを全部書き換える
2019/03/06(水) 00:54:59.22ID:jXlQSKwgr
>>657
試してないので想像ですが1ファイル数mb程あるので一括読み込みで取得出来るんでしょうか…?
変数に入るのか、pc動作的にどうなのかが気になりますが…一度試してみます
2019/03/06(水) 01:00:18.09ID:wqRC+Uom0
>>654
replace(str,vbcrlf,"うんこ")
2019/03/06(水) 01:08:03.42ID:qZfNBEKA0
>>659
文字列型に格納すればいいと思います
確か数Gbぐらい格納できたはず
662デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/03/06(水) 07:35:28.45ID:3ub5rlP9H
IEってBusy以外にステータスも見てないとループ抜けちゃわなかったっけ
2019/03/06(水) 07:51:07.24ID:9ZQV49QQM
抜けた気がする
要素がありませんってよく怒られた
2019/03/06(水) 08:14:30.41ID:OZZFIuGOd
両方見てても抜ける時が有る。
滅多に無いけど。

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

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

require 'csv'

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

\n は改行

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

a の部分は、\"〜\"で囲まなくてもよい
2019/03/06(水) 09:17:24.17ID:R/1sU7PR0
rubyって・・・
もう完全に終わってる言語なんだからそんなもの勧めないでよ
2019/03/06(水) 09:47:16.43ID:HGc0sPl8M
Twitterで紹介されてたこれ一度試してみたけど機能してたよ

https://www.excelspeedup.com/readcsv/
2019/03/06(水) 11:28:25.04ID:p4qnJjw30
下記リンク先のページ下部にあるユーザ定義関数がVBAとして正しく書けてるかチェックして貰えませんか
https://peltiertech.com/loess-smoothing-in-excel/
2019/03/06(水) 11:39:12.31ID:R/1sU7PR0
>>669
どういう計算をしてるかは知らんけど、コード上は問題ない
2019/03/06(水) 15:05:39.78ID:p4qnJjw30
多分スレチだろうと思いますが、>>669をLibreoffice最新版に実装したところ戻り値に=LOESS(x,y,z,n)で指定したyの配列がそのまま表示されたのでコードどこか間違ってるか仕様変更したのを俺が見落としてるのかなと思って聞きました
ありがとうございました
2019/03/06(水) 15:12:15.84ID:n2VNtnMC0
>>666
市ね
673デフォルトの名無しさん (ワッチョイ 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
2019/03/06(水) 21:30:16.04ID:o9MkSJEKa
>>673
ifの条件がおかしい
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 みたいな感じで入れてからセルに貼り付けると希望の結果になりますがめちゃくちゃ時間がかかります(大量データに使いたいので)
他にやり方があれば教えてください
2019/03/06(水) 21:34:55.08ID:LIhekGiK0
例のA列は↓の間違いです、すいません
1 2019/3/6
2 20:04
3 \10,000
2019/03/06(水) 21:37:03.61ID:o9MkSJEKa
画面表示を止めても遅い?
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を引いてインデックス調整するようにしたりか
2019/03/06(水) 21:56:07.90ID:ZuXoITq7x
>>673
改めて見たらIfの条件もおかしいね
And条件にしないと
2019/03/06(水) 22:13:28.72ID:0dxLNo3Q0
馬鹿過ぎるのが問題
2019/03/06(水) 22:23:00.33ID:R/1sU7PR0
>>675
textプロパティ

Sub foo()
Range("c1").Value = Range("a1").Text
End Sub

範囲で代入は出来なかったので、適当にforeachで回してくれ
Range("c1:d2").Value = Range("a1:b2").Text
2019/03/06(水) 22:36:44.70ID:LIhekGiK0
>>677
止めた状態で遅いです

>>681
セルに直接入力していくと更に遅くなると思います
2019/03/06(水) 22:56:49.85ID:xGO4PHc60
CSVで書き出せばTEXTが得られるぞ
2019/03/06(水) 23:08:59.57ID:R/1sU7PR0
>>682
あぁtext使ったって書いてたね、ゴメン
配列でも無理なら高速化はどうだろうか
https://15g.jp/post-314/

高速化でも配列でも重いなら、
もうアクセス辺りに移行した方がいいかも
2019/03/06(水) 23:09:20.80ID:R/1sU7PR0
>>683
csvは勝手に変換されるのが鬼門すぎる
2019/03/06(水) 23:48:56.32ID:LIhekGiK0
やっぱりTextプロパティ使う以外無理そうですかね…
2019/03/07(木) 00:01:59.48ID:UepKFInK0
後は>>683かな
住所の"1-1-1"みたいなものがなければ行けると思う。
後はダメ元でgoogleスプレッドシートに移植してマクロ組んで見るとか
2019/03/07(木) 00:20:00.91ID:UmWyYgm40
>>686
textの取得だけループでまわして、
二次元配列に直して代入するとかは?
2019/03/07(木) 00:26:34.58ID:bl5ieqXF0
>>688
遅いって書いてあるだろ。もっと上をお望みなんだよ
2019/03/07(木) 00:44:39.67ID:UmWyYgm40
>>689
直接入力が遅いって言ってるから、入力だけ一括でやれば?と思ったんだが
2019/03/07(木) 00:46:43.69ID:zt2fCEgu0
>>687
他のファイルは使えない状況なんです…

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

諦めます
今回の事でRangeのValueやFormulaみたいにTextも配列に入れられるようにしてくれと心から思いました
色々考えてくれたみなさんありがとうございました
もしいい方法思い付いたらいつでも待ってます
2019/03/07(木) 01:15:09.98ID:UmWyYgm40
描写と計算止めてCopyメソッドで10万行×30列を列ごとにコピペしたら一瞬で終わったが・・・
っていうかこれ以上増やそうとするとリソース不足でエクセルが悲鳴を上げるし、どういうデータをコピーしたいんだろ
2019/03/07(木) 01:18:31.96ID:UmWyYgm40
あ、書式変わるのか・・・上のレスは忘れてください
2019/03/07(木) 02:33:57.63ID:cMWEbvvB0
コピーしてテキストとして貼り付けじゃダメなのか?
2019/03/07(木) 02:58:39.40ID:Wb+CU65ma
早い遅いは個人の感覚でしかないとおもう
2019/03/07(木) 07:14:54.02ID:RImgiSgC0
>>691
>>684 の Application.ScreenUpdating = False
は効かないのか。 画面描画が止められるよ。やってないから適当なこと言ってるかもしらんが
画面描画以外で時間がかかるってどんなだよ。 ちょっと想像できんがなあ
なんでだろう
2019/03/07(木) 07:24:21.94ID:ldY6B6U1d
>>691
valueで配列コピペした後に、セルに対してそれぞれ書式設定を手動もしくはマクロですれば?
書式は列ごとくらいは揃ってると思うし。
それもバラバラってことだと、そもそも集計の仕方が悪過ぎる。
2019/03/07(木) 07:28:16.03ID:IFVQ3Zq/0
>>674 >>678
ありがとうございます!
意図するようになりました。
-1で減らしていく発想は本当になかったのでいい勉強になりました。
このたびは本当にありかございました。
2019/03/07(木) 07:44:13.43ID:ldY6B6U1d
>>696
684じゃないけど、複雑に関数組んだりとか遅い関数が大量に入っててかつデータ数がエクセル上限近くで再計算に時間がかかるとか、あとセル上で反復計算やソルバー使ってたりするとある。
ただ684は書式がバラバラなセルを扱ってる時点で、複雑な計算をしてるとは思えないけど。
2019/03/07(木) 07:52:53.03ID:RImgiSgC0
>>699
>>675をもう一度見て来いよ。 これだぞ。そんなややこしいことしている話ではないと思うが

>表示形式が混在したセルを見た目通りのまま表示形式が文字列の別のセルにコピーするいい方法ありませんか
2019/03/07(木) 08:38:04.86ID:QURDMn8Xd
再描画等定番の部分は止めています
セル数は100万ぐらい、列数、行数分回してTextプロパティを1セルずつ配列に入れる処理だけです
シートへの貼り付け処理ではなくこの取得部分に時間がかかります
同じ回数回すAや、Format関数、worksheetfunction.textを使った場合その半分以下の時間ですが望みの結果を得る方法はわかりませんでした…
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"

データが多すぎて無理?
2019/03/07(木) 10:58:23.63ID:QGzmAmpt0
アー、見た目が同じまま、「文字列」なのか・・・
すんません無視してください
2019/03/07(木) 11:39:04.19ID:OUaGUe4hM
>>675
A1:A3をコピーしてメモ帳とかに貼り付け
全選択してコピーしてB1:B3に貼り付けでできた
VBAだけで完結させる方法は知らん
2019/03/07(木) 12:41:45.56ID:g1Ak82VsF
勘違いしてる奴が多いが、自動計算を止めたり描画を止めるのは初心者が速度アップのためにやる方法で、>>675のように速度アップの為に考えて組まれている場合には効果が無い。

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

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

させるには、どうすれば良いですか?
2019/03/07(木) 18:34:04.34ID:rXPjoswtF
>>709
これ、本当?
だったらクリップボード弄って高速化できるかもしれない。
2019/03/07(木) 18:34:43.55ID:qs1KmWLa0
複雑な処理でデータ量が多いなら遅くても仕方ないんじゃね?
どうせエクセルだし、専門職じゃないし、大した会社じゃないし、給料安いし
2019/03/07(木) 19:03:35.19ID:qo/Sl71gx
>>710
やり方はいくつもある
一番簡単な方法を書くと、

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

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

もしくはコマンドボタンのクリックイベントプロシージャでユーザーフォーム2のマルチページコントロールのプロパティを変更する(value=1,2)方法もある
2019/03/07(木) 21:34:32.55ID:zt2fCEgu0
セル範囲をコピーしてクリップボードから直接二次元配列に入れるようにしたら何十秒もかかってたのが0.5秒になりました
ただ、クリップボードから切り出す時にうっかりセルの値に手を加えてしまわないかが心配です
単純にVbCrLfで行を区切って、VbTabで列を区切ってるんですがそれで問題ないんでしょうか?
2019/03/07(木) 22:48:37.99ID:6oCjCAip0
>>715
セル内改行を使ってなければそれで大丈夫
2019/03/08(金) 00:03:05.83ID:+kJkkfKW0
>>716
セル内改行入れてみたら…またこんな落とし穴が…
2019/03/08(金) 02:12:12.40ID:k3BFo3Xw0
>>713
>>714
プロジェクトが大きくなるにつれグローバル変数は神経を使うので
極力さけたかったのですが
Form1.ActiveControl.Name、でいけそうですね
2019/03/08(金) 03:08:04.26ID:Tjqa7GxLa
システムの大規模化が想定されるならユーザーフォームでユーザーフォームを呼び出すのは危険w
ユーザーフォーム間の依存性を高めてしまうw
ここはユーザーフォームを呼び出すクラスを作った方がいいw
クラスを介して情報を渡せば安全だし再利用性も高まるw
2019/03/08(金) 08:00:14.88ID:IUpgvQZO0
やっぱりuserformからuserform呼ぶのってよくないのか
こういうのってクラスモジュール使えるんだろうなって思ってたんだけど
余り使ったことなかたんで、ちゃんと勉強してみよう
参考書ぽちってきたわ
JavaとかC#を多少触ってきたからオブジェクト指向の概念は分かってるんだけど
VBAでの効果的な使い方をマスターしたいわ
2019/03/08(金) 08:01:46.46ID:aYiBhvGax
引数付きコンストラクタすら簡単に実装できない言語で呼び出し用クラス作る方がきついと感じてしまうね、個人的には
2019/03/08(金) 08:08:56.71ID:IUpgvQZO0
普通のコンストラクタには引数渡せないんだ
まぁその辺の限界も含めて一度勉強しておいたほうがいいとは思ってる
できることと出来ないことを知った上で、クラスを使う選択肢を持つことができればいいかなって
2019/03/08(金) 08:15:50.67ID:nNie5CZRM
VBAでクラスとか言ってるのはたいてい知ったかだからスルーしていい
VB.NETとかC#知ってたらストレスしかたまらん
2019/03/08(金) 08:23:55.15ID:URVXf1I+a
そもそもVBAにクラスが欲しくなるような規模の要件を押し付けている時点で業務設計が破綻してる
2019/03/08(金) 08:24:18.53ID:wvJFI7ubd
こういう場合にクラス使うの?
何か違うと思うんだが。

VBAでも見た瞬間にクラス使おうと思う場合もあるんだが、そういうことは少ないな。>>323のような話なら見た瞬間にクラスだなと思うんだけどね。
2019/03/08(金) 08:43:43.11ID:URVXf1I+a
>>725
ワークシート上でデータが常に単なる二次元の表として見えているために、
その行をエンティティとして見るような発想になりにくいんだろうね
別にそれが悪いとは思わないが
2019/03/08(金) 08:55:03.19ID:GpWg6Xx2M
逆にいうと、ワークシート上で人間が無理なく扱えるようなデータ構造にならざるを得ないから、
生え抜きのVBerが作りがちな酷いDB設計になりにくい
そういう良い意味でデータ構造に無理が利かないので、クラスでデータ構造を抽象化したくなるケースが少ないのだと思われる
2019/03/08(金) 12:25:06.22ID:3iX4ejeoF
DBとして扱うならクラス使うことも考えるよ。
でも、DBとして扱うことも多くない。
DBならAccessにしちまうんで。
2019/03/08(金) 16:46:49.91ID:YR0R2o1EM
いまAccessを使う理由って何?
無料版のSQL Server のスペックの方が上だろう。
移行が大変だから?
2019/03/08(金) 16:53:49.99ID:84JrbWWM0
エンジンだけで比べてる頭の不自由な人かな?
2019/03/08(金) 16:53:54.67ID:GpWg6Xx2M
フォーム中心のまともなデータベースアプリが比較的簡単に作れるという点では意味がある
まあ今ならPowerApps使えばいいと思うけど
2019/03/08(金) 17:59:29.39ID:uRP/bscvx
PowerApps使うならPowerShellかJScript使わないとな
まぁVBAは要らんわ
2019/03/08(金) 18:55:16.76ID:aTSUMsKkd
???
会社のPCに既にAccessがインストールされているのにもかかわらず、
Excelで扱うような程度のものをDBとして扱いたい時に、SQL Serverインストールはじめちゃう人?

全てにおいてセンスねーわ。
2019/03/08(金) 18:56:25.33ID:aTSUMsKkd
まだSQLiteの方が理解出来るわ。
2019/03/08(金) 19:18:32.09ID:rErY3KdLM
>>733
正直君の意見はよくわからん
Management Studioすごく便利だよ
それにExcel からADOやODBCでつつく際のIFは大して変わらないんだからSQL Serverの方がパフォーマンスいいじゃん
2019/03/08(金) 19:24:33.31ID:+kJkkfKW0
うちの会社そういうの入れる時はそれを使う理由説明して了解得るのに手間がかかる
2019/03/08(金) 19:46:50.70ID:iqA0OhOAd
まあ普通はセキュリティ部門にリクエストして審査通らんと入れるのは無理だわな
VBAも原則禁止だから毎回例外申請してるわ
2019/03/08(金) 21:38:31.98ID:quBQyQDX0
環境申請が必要な業務を未経験者にさせるほどうちの会社はブラックじゃない
2019/03/08(金) 21:38:33.69ID:84JrbWWM0
>>735
馬鹿はエンジンしか見ていない
2019/03/08(金) 22:23:14.58ID:AVEVGkz60
具体的な事を言えよ
2019/03/08(金) 23:50:58.19ID:84JrbWWM0
>>740
馬鹿には理解できんのか?
2019/03/09(土) 02:13:50.44ID:zk58FQoZ0
会社がoffice365に切り替わってAccess使えるようになった俺歓喜
2019/03/09(土) 02:15:54.88ID:w2C0D7DGa
accessはスレチ
744デフォルトの名無しさん (ワッチョイ de8c-91/d)
垢版 |
2019/03/09(土) 04:02:18.85ID:83GbxNdW0
accessって開発続いてるの?
Excelを強化してAccessを見放すように思えてしょうがない
745デフォルトの名無しさん (ワッチョイ b7f1-IjB2)
垢版 |
2019/03/09(土) 04:12:29.83ID:676zsyfX0
accessはウンコです
2019/03/09(土) 07:26:22.26ID:j4uu9hgX0
Acccessとか。 いつの時代の遺品だよって感じだな
使いにくかったしなあ
2019/03/09(土) 07:48:05.33ID:ABNsWlsO0
>>744
>>731も書いてるけどExcelとAccessって用途が違うから当面なくならないと思うよ
2019/03/09(土) 08:34:58.65ID:nDxlP6J/0
SQLとOracleとAccess使うと書き方混乱する
2019/03/09(土) 09:22:46.51ID:Z89d69KF0
シート上に複数のテキストボックスを配置して、
KeyDownイベント + vbKeyRightとかvbKeyTabで、
テキストボックス間を移動出来るようにすると、
カーソルがたまに見えなくなるんだけど、回避策ない?
見えないだけで、存在はしているので、
文字は打てるんだけど、文字まで透明になっちゃう。
テキストボックスを何回か適当にクリックすると、
突然見えるようになる。
2019/03/09(土) 09:24:00.36ID:Z89d69KF0
↑あと、わざわざ画面更新を止めたりはしていない。
2019/03/09(土) 09:29:10.33ID:Z89d69KF0
↑あ、別のPCで開いたら再現しなくなった。
もしかして、グラフィックボードの問題?
2019/03/09(土) 10:19:05.53ID:zk58FQoZ0
>>751
ボードと言ってるのはたぶんドライバのことだと思うけど、その可能性はあるよね。
いくつかバージョン違いを落としてきて試してみればいい。
とりあえずは、各メジャーバージョンが上がったばかりのは除いて、それぞれ最終リビジョンのを集めてきてかな
753デフォルトの名無しさん (ワッチョイ 1e90-R+To)
垢版 |
2019/03/09(土) 21:56:21.30ID:QAZD12fZ0
excel vbaとaccess vba
どちらの方が実用的ですか?
2019/03/09(土) 22:00:31.82ID:BnoVO+GEM
>>753
目糞鼻糞
今時ローカルで完結する業務要件なんかほとんどない
755デフォルトの名無しさん (ワッチョイ 1e90-R+To)
垢版 |
2019/03/09(土) 22:03:03.09ID:QAZD12fZ0
両方できて当たり前ですか?
2019/03/09(土) 22:06:43.06ID:vJsfVwnQ0
触り始めればすぐ覚えるよ
触る機会がexcelのほうが多いってだけ
2019/03/09(土) 22:20:16.59ID:BnoVO+GEM
>>755
Excelだけでいいよ
今時AccessやるくらいならSalesforceでも覚えなさい
2019/03/09(土) 22:33:56.74ID:u5Pk3KZwM
Accessに親でも殺されたのか? w
2019/03/09(土) 22:36:15.94ID:M4mulWlpM
>>755
超小規模ならExcel
テーブルの規模が大きくなってくるとAccess
Accessの何がいいかって言うとオレはレポートだと思ってる。あれを使いたいがために、オレはdbアプリ(フロントエンド)はAccess一択。
テーブルの規模がさらに大きくなってきたら、テーブルだけをoracle、SQLServerなりに移行。
そもそもAccessは大規模用ではないが、わかって開発すれば大規模用に寄せていくことはできる。
2019/03/09(土) 22:42:40.73ID:ouuI5dEha
>>758
シンプルに、需要がない
2019/03/09(土) 22:43:14.91ID:M4mulWlpM
>>759
Access一択は語弊があるけど、Accessだけで完結できるならAccess押し。
あとは顧客要望で、webなりc#なり様々
2019/03/09(土) 22:52:20.46ID:ABNsWlsO0
>>760
需要の無いものをMSがわざわざ開発して売ってるのかw
無職の妄想乙
2019/03/09(土) 23:38:00.61ID:ouuI5dEha
>>762
実際ほとんど放置されてるでしょ
そもそもAccessってノンプログラミングで専用アプリ風のDBアプリが作れるのがメリットなのであって、そこは全く否定するつもりはないけど
プログラミングするんなら他にもっと優れた選択肢はいくらでもあるよ
2019/03/09(土) 23:47:17.35ID:c6PO5ulL0
With Access ってやりたくなってきたな
2019/03/10(日) 00:26:33.47ID:AZoiY/Tr0
中小企業は普通にエクセル・アクセス
使える人間が多いのが最大のメリット。事務員だけでも割とどうにかなる

エクセルvbaは死ぬほど使う
アクセスはvbaじゃなくSQLを覚えたほうが良い
でもSQL覚えるのって結構たいへんなんだよよねぇ
2019/03/10(日) 00:34:07.81ID:/SA1VNEE0
とりあえずVBAはどっちでも同じだから、あとはどういう環境を用意されることが多いかと考えると圧倒的にExcelに縛られることが多いので実用で考えるとExcelだろうか
Accessでやる方が楽な時でもExcelでやらされることが多いし
2019/03/10(日) 00:37:17.38ID:AZoiY/Tr0
Accessは大抵前任者なりシステムなりが作っている場合が多いから、ほとんど触る事が無い
エクセルは事ある毎に0から作ったり改修する事多いからvbaはめっちゃ役に経つ
2019/03/10(日) 00:45:32.25ID:/1sFaTiS0
素人が作って不正統計したりするのもexcel
2019/03/10(日) 00:54:56.33ID:W5FlChvZ0
>>765
複雑になってくるとSQL知識は必要になるけど、クエリーデザイナ(QBEグリッド?)でほとんどできてしまう。
昔oracleでSQLゴリゴリ書いてたあとAccessのクエリーデザイナ見て「これ考えたやつ天才やな」とマジで思った。
選択も更新も削除も書けて、テーブル連結も表現できて、革命やなと。
2019/03/10(日) 01:10:02.43ID:HL2UVho30
accessで帳票画面作りが便利過ぎて
Excelにもレポートつけて欲しい
方眼紙神Excel化しまくり
2019/03/10(日) 04:21:41.33ID:RhjsjUYS0
>>763
お前がAccess知らんだけだろw
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 およびモバイル デバイス用にコードなしのビジネス ソリューションを作成することを検討してください。

だそうだよ
2019/03/10(日) 08:09:35.64ID:8TH6z4a90
Salesforceて。
クエリの自由度がAccess以下じゃん。
2019/03/10(日) 08:13:57.05ID:jNouaRswM
>>773
仮にそうだとしてもAccessより圧倒的にスキルの需要が高いのは事実だよね
それは何故だと考える?
2019/03/10(日) 08:46:12.12ID:RhjsjUYS0
>>772
まじでAccessに親でも殺されたのかよw
必死にググって探してきたんだろうけど見てて恥ずかしいぞ
2019/03/10(日) 08:48:28.53ID:W5FlChvZ0
>>772
ローカル?
Accesswebアプリ?
だから、知らないやつは黙っとけと。
自分の周りで需要がないから、どこもそうだとは限らないって考えられないのか?
MSが推奨してても、そうならなかったこともあるだろうに(いちいち書かない)。
2019/03/10(日) 09:03:35.58ID:W5FlChvZ0
>>774
sfは使ってる側だが、Accessと比べてる意味がわからん。
それぞれメリットデメリットがあって、顧客の要望にどちらがよりふさわしいかだぞ。
Accessのときもあるし、そうでないときもある
office365が広がって、Accessで作るメリットは開発側も、アプリ導入側も確実に増えてきた。
例えば、visualstudioで作るなら開発側は買わないといけない(小規模会社以外は)
これだけ書いてわからないとしても、スレ違いもあるからこれ以上議論しない。Accessスレでも、くだらないから議論しない
2019/03/10(日) 09:43:54.35ID:Cor3H27v0
ここは顧客のためにアプリ開発してるような人が来るスレじゃない、というのが前提にあるんじゃないの?
だから話がずれてしまう
2019/03/10(日) 10:10:19.51ID:LxD//o4za
個人商店で売上管理する程度か、ソフト会社でシステム管理任されてるかでは違いすぎるわな
2019/03/10(日) 10:21:42.56ID:jNouaRswM
顧客の要望笑さんのように目の前の要件だけ片付けてトンズラできる立場なのか、
将来も含めて面倒見ないと行けない立場なのかでも全然違うわな
後者ならさすがにAccessは正当化できないわ
2019/03/10(日) 10:22:42.48ID:Cor3H27v0
スキルレベルの話というより、制約条件が自分要因なのか顧客要因なのかが大きい。
こんな場所で顧客要因の話なんか相応しくないだろ、ってことだ。
2019/03/10(日) 10:42:00.95ID:U7oWyg8EM
とにかく安く作れと命令されればこうもなろう!
2019/03/10(日) 10:45:41.83ID:9Z3HOdWo0
winformやwpfがaccessより優れていればよかったんだがな
2019/03/10(日) 11:17:38.37ID:AZoiY/Tr0
>>783
分かる。なんか色々解決した気がする
Silverlightも死産だった
2019/03/10(日) 11:28:51.41ID:8TH6z4a90
>>774
そりゃググればいくらでも情報出てくるAccessとは比較にならんからな。
2019/03/10(日) 11:34:33.33ID:UR1GQMqix
えっと、、、ここExcel VBAのスレですよね?
2019/03/10(日) 11:44:50.15ID:z6hGNEnV0
馬鹿はAccessのエンジン部分だけしか見ていない
2019/03/10(日) 12:00:46.26ID:Cor3H27v0
どうせくだらないオレオレ都合を一般化してるんだろ
2019/03/10(日) 13:42:15.79ID:UR1GQMqix
Access VBAは提供機能の環境結合度がExcel VBA以上に強いイメージを持ってるんだけど、Office365になってもバージョンアップによる互換性の問題は変わらない感じ?
2019/03/10(日) 15:38:12.98ID:DYQTDh8PM
GUIをExcel、データストアをAccessとするアプリをVBAで作るのが最強ってことですね
2019/03/10(日) 16:10:54.47ID:W5FlChvZ0
>>789
提供機能の環境結合度が何を言ってるかわからないが、昔作ったやつの改造質問が時々来て、軽く動かす範囲において互換性に問題があったことはない。
互換性問題でお客様から問い合わせ来たこともない。mdbの話し。

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

最近経験したのは、Accessのグラフが昔のママだったので、新しいグラフを使うためにExcelに結果出力することにした
(ながっ。Accessスレ過疎ってるけど、そっちで書いたとここに書けば何人か見に行ってくれると思う)
2019/03/10(日) 16:46:27.59ID:QRthXdOt0
Excelでも
VBAでも
質問スレでもない
でもどうせ平日は質問もないし、土日はこういう流れokみたいにしてもいいんじゃないかな
2019/03/10(日) 17:36:22.03ID:hFpGjFbxd
どうでも良いけどセンスね―奴が多いな。

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

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

俺はトヨタとかホンダとかと同じ知名度の会社で働いてるが普通にAccess使ってる。
というか、大きな所は結局いろんなツール使ってる。
2019/03/10(日) 17:53:03.67ID:UR1GQMqix
我慢できず煽りと自慢を入れちゃう辺りがかわいい
2019/03/10(日) 18:14:41.27ID:QRthXdOt0
知名度で比較してもその中には昭和みたいなやり方の企業は山程あるんだが
2019/03/10(日) 18:19:33.93ID:hFpGjFbxd
>>795
あるかもね。
うちの会社は違うけど。
2019/03/10(日) 18:21:35.02ID:QRthXdOt0
>>796
と、その昭和な会社も思ってるからな
レスだけだと実際どうかは判別つかない
2019/03/10(日) 18:25:09.94ID:hFpGjFbxd
馬鹿でかいDBサーバーが何個もあって、ちゃんとしたシステムもある。
けど、いろんな部所が独自にツール作ってるし、その馬鹿でかいDBに参照だけさせて貰って、Accessをフロントにしてるのもある。
Excelをフロントにしてるのもあるな。

もちろん、好き勝手が出来るわけじゃないが。
2019/03/10(日) 18:34:31.65ID:hFpGjFbxd
>>797
そもそも大きな会社のことが分かってない発想だな。
大きな会社は新しい考え方してる部署もあるし、古い考え方してる部署もある。
普通に色んな部署があるからAccess使う所もたくさんある。
2019/03/10(日) 18:51:24.29ID:/1sFaTiS0
それでもAccessはないかもしれない
2019/03/10(日) 19:12:48.88ID:Cor3H27v0
それにしてもAccessに批判的な意見に対して「センスが悪い」と言うのは変なバイアスを感じるよな
2019/03/10(日) 19:29:50.41ID:UR1GQMqix
>>799
全社システムを入れてデジタル化を推進しようとしてるかと思えば、部署や事業分野毎に統制レベルがまちまちだったりして結局色んなシステムやアプリを使ってたりするのがいわゆる大企業だよな
もちろん電話FAX紙資料頼みの昭和的なやり方の部分が残ってることもある
2019/03/10(日) 19:30:28.09ID:FHxk+Xrb0
大抵の部署は「エクセルワードパワポ使えりゃいい」ってことでHome&Business買って終わりだからな
そもそもAccessに触れる機会がない
2019/03/10(日) 19:41:28.13ID:6Vmijfcb0
3つのエクセルファイル開いて終わったら
3つともcloseしてquiteしてるんだけど
タスクマネージャみたら3つのエクセルがのこったまま
なんでー?
2019/03/10(日) 19:46:40.37ID:/1sFaTiS0
ういるすじゃね
2019/03/10(日) 19:57:44.50ID:QRthXdOt0
>799
20代前半?
2019/03/10(日) 20:53:30.17ID:/SA1VNEE0
>>804
プロセスが残ってるってことだよね?
3つのエクセルファイル開く前はプロセス0個だった?
closeしてquiteしてるオブジェクトはちゃんと合ってる?
2019/03/10(日) 22:01:10.58ID:RhjsjUYS0
>>803
いわゆるそれなりの企業でOfficeを個々の部署で買ってるところってそんなにないだろ
2019/03/10(日) 22:37:21.73ID:FHxk+Xrb0
>>808
ウチの場合各部署の上長に選択肢与える方式だから
Publisher使う広報部以外Professional選ぶとこほとんどないよ
2019/03/10(日) 23:03:17.67ID:hFpGjFbxd
>>802
論点の分かってないバカは何処にでもいるな。
つまり結論は、Access使ってるということだよ。

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

>>803
そりゃ残念だったな。
Officeは部署で買うもんじゃ無いと思うぞ。
聞いたこと無いけど。
うちの会社は全員Access入ってると思うぞ。
2019/03/10(日) 23:04:10.67ID:hFpGjFbxd
>>801
センスが悪いのは対抗に成りようがないもんを挙げてるからだよ。
2019/03/10(日) 23:13:37.64ID:RhjsjUYS0
>>809
個々に発注してるの?
ボリュームライセンス使わないの?
2019/03/11(月) 00:05:51.48ID:tsrenNBW0
AccessやめてSQLServerにしろって言われて移行の手間以外の理由で嫌がる人間がいるだろうか?
いや、いない
2019/03/11(月) 00:06:57.17ID:lsnxSivOx
なんか他人を見下したいだけのタイプっぽくてウザいからNGしたわ
仮にこいつがAccess詳しくてもこいつから教わりたくないなって感じ
815デフォルトの名無しさん (ワッチョイ 927c-fEQS)
垢版 |
2019/03/11(月) 00:09:57.12ID:sN5dooJH0
VBAより細かいことができて簡単でメジャーでお勧めってJAVAでいいの?
用途は個人で簡単なアプリを作る程度です。
2019/03/11(月) 00:11:11.53ID:tJkNrW1I0
Access取り上げられてManagement Studio渡されたらうにょる
2019/03/11(月) 00:12:43.40ID:B6nWiYCUd
>>813
SQLサーバーにするようなのは手間もそうだが、規模が違うだろ。
そんな話になるなら最初からExcelやAccessの話になんてなってない。

そんなこともわからね―のかよ。
自由にできる中小とは違うんだよ。
2019/03/11(月) 00:16:15.83ID:B6nWiYCUd
>>815
それは微妙だな。
細かいことは出来ない場合がかなりあるだろうな。
簡単かどうかも微妙。
難しさの方向性も違うし。
2019/03/11(月) 00:21:09.07ID:B6nWiYCUd
>>816
問題は何で組むかって話になるだろうね。
昔、MSDEで組んでた時に使ってたけど、Accessなんか競合するようなもんじゃない。
まあ、VBAでも組めるからExcelやAccessから繋いでも良いんだけど、それって本末転倒じゃね?

結局VisualStudioで組む話に成るんだろうな。
2019/03/11(月) 07:05:51.99ID:JOj7lbWG0
>>813
馬鹿はエンジン部分だけしか見ていない
2019/03/11(月) 07:19:27.24ID:n6vPhCvaM
>>813
想定の範囲内でしたね
Access以上に帳票作成が楽なソリューション出してください
あなたならできるはずです
あっ、もちろんコストは想定の範囲内でお願いしますよ
2019/03/11(月) 09:28:28.62ID:tsrenNBW0
>>821
ExcelからSQLServerのデータをつつけばいいじゃん
このスレ的にも趣旨にあう
2019/03/11(月) 10:13:10.23ID:n6vPhCvaM
印刷に難のあるExcelで帳票作成?
わざわざ茨の道を進む提案は想定の範囲外でしたよ
次回からもう来なくていいですw
2019/03/11(月) 10:35:34.29ID:tsrenNBW0
>>823
帳票?印刷?
そんなもんPCでやるわけないでしょ
君こそふざけてるんじゃないの?
2019/03/11(月) 10:49:41.28ID:fslMg+hgM
>>824
えっ?
2019/03/11(月) 10:57:18.05ID:tsrenNBW0
>>825
帳票印刷なんて古い基幹システムでやるもんだし、レガシーでつまんない仕事だからPCでやりたくないでしょ
2019/03/11(月) 11:09:41.27ID:n6vPhCvaM
>>824
一体何を言ってるんだろう… w
2019/03/11(月) 11:11:45.09ID:n6vPhCvaM
>>826
お前さん、例えばスマホとか契約した時に契約内容を記載した紙貰ってないかい?
帳票ってそう言う奴のことな
2019/03/11(月) 11:17:50.98ID:tsrenNBW0
>>828
それをPCのアプリで出力しないでしょ?
現場のPCでやるのは出力された帳票イメージをプリンタに送ることさ
2019/03/11(月) 11:33:05.59ID:Mb6GwggX0
まあホスト側でPDFを作っちゃって、あとは印刷するだけみたいなシステムも最近は増えてるけど、
送られて来るのは印刷したい数字だけで、クライアント側で印刷イメージを組み立てるシステムだって普通にあるぞ
2019/03/11(月) 11:34:08.24ID:tsrenNBW0
それにそんなことは営業所レベルのことじゃない?
2019/03/11(月) 11:44:06.02ID:04nfU8jWd
>>831
ここは大企業やサーバ管理者専用スレじゃないし
世の中にはパソコン1台だけで経理や発注をやってるような中小零細だってある
現実にExcelで作られた帳票は世界中を駆け巡ってる
2019/03/11(月) 12:22:04.66ID:n6vPhCvaM
>>829
お前一度帳票ソリューションとかでググってみ
いろんな形態あるから1種類だけで語ると恥かくぞ
2019/03/11(月) 12:56:27.77ID:zh+jpn1Ya
>>823
印刷は確かに若干弱いがエクセル帳票は悪くないアイデアだと思う
プログラムで生成物からデータを取得できるから帳票作成のスモールテストを作りやすい
まあCIサーバーで動かないと意味がないのでVBAの出番はないけど
2019/03/11(月) 13:13:58.34ID:M7+7uBBxM
>>833
世の中全体なんて言ったらきりないでしょ
>>828が言うDOCOMOショップとかの話に反論したのさ
2019/03/11(月) 17:10:59.27ID:n6vPhCvaM
>>835
「例えば」っていう文言すら理解できないの?w
てか、話の流れでわかるだろ
2019/03/11(月) 18:08:31.25ID:tsrenNBW0
>>836
いやいやいやいや
「帳票なんて基幹システムで出すもんでPCじゃしないでしょ」という意見に対して>>828は携帯ショップの例を出してきたんだぞ
2019/03/11(月) 18:36:20.35ID:Rf81Fxun0
>>824
ガリ版印刷かと思った
2019/03/11(月) 18:37:23.11ID:Rf81Fxun0
言わんとする事は分かるけど、
ID:tsrenNBW0 は色々と日本語おかしいぞ
入って半年の新人か、酔っぱらいが話ししているようだ
2019/03/11(月) 18:39:03.34ID:n6vPhCvaM
>>834
Excelはページ内の列に縛られるから結構大変だよ
見積書とかでお客様名称の位置を変えたら一覧表に影響するとか
特に複数の表を位置ページに収めるとかが大変すぎる
2019/03/11(月) 18:39:39.43ID:n6vPhCvaM
>>840
位置ページ ⇒ 1ページ
2019/03/11(月) 18:40:36.46ID:n6vPhCvaM
>>837
そこまで言うならすべての携帯ショップの帳票システムが1種類しかないことをソース付きで示してくれ
2019/03/11(月) 18:40:41.61ID:fslMg+hgM
>>837
帳票は基幹システムでも出すし、現場のAccessからも出します。
携帯ショップのはあくまで例えだが、アプリで出してても何らおかしくない。webからサーバで作成した帳票出してたとしても世の中全てがそうじゃない
バカはすっこんでろ
2019/03/11(月) 18:48:10.82ID:tsrenNBW0
>>843
ああ、じゃ携帯ショップの話は例が悪かったってことで引っ張るのはやめにするよ
2019/03/11(月) 18:52:52.30ID:tsrenNBW0
もともとAccessなんかよりSQLServer使えばいいのに、という意見に対して「センスが悪い」と評したやつがムカつくんだよね

それってただの自己擁護じゃねえの?
2019/03/11(月) 18:57:56.68ID:+UqUSWhfM
>>845
ExcelVBAスレで何言ってんだって話だよな
847デフォルトの名無しさん (アウアウウー Sac3-q+B7)
垢版 |
2019/03/11(月) 19:19:43.98ID:VQvu/Jc3a
まーまー、みんなケンカするなよ。ケンカしたくてここに来てるやつはどっか行ってくれ。楽しく、とまではいかないにしても、他人の意見を尊重して、まったりと行こうぜ
2019/03/11(月) 19:25:03.45ID:mobnRMp/x
VBAスレでイキる奴も煽られる奴もダサすぎ
2019/03/11(月) 20:02:00.38ID:Qce4TTJA0
他人からファイルが返ってきたときに印刷プレビューになってるとイラっとする
2019/03/11(月) 20:41:29.39ID:SWNQzsKE0
そんな性格だから禿げたんだな
2019/03/11(月) 20:46:16.50ID:tsrenNBW0
>>849
自分はそれじゃなくてアレがイラッとする
だからよく ActiveSheet.DisplayPageBreaks = False
をやる
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の方が良いと言われた気分だわ。
2019/03/11(月) 21:56:59.54ID:SWNQzsKE0
accessが好きとか嫌いとか最初に言い出したのは誰なのかしら
2019/03/11(月) 22:03:37.96ID:tsrenNBW0
>>852
3回読んだが意味がよく分からん
俺の最初の主張は>>729から始まってるんだが、「データはExcelじゃなくてAccessに置け」という他の意見に対して
「いや今時AccessなんかじゃなくてSQLServerでしょ」というのが意図だ。
そっからなんかこじれてるんだが、ここでの俺の前提はフロントUIはエクセルというものなんだよね。
ExcelからのSQL発行という点でUI表面上の差が大してないと考えて比較している。
2019/03/11(月) 22:45:47.44ID:JOj7lbWG0
>>854
馬鹿は死ねよ
2019/03/11(月) 23:03:46.33ID:tJkNrW1I0
>>854
フロントがExcel程度でなんとかなるデータならAccessで十分だろ
すでに大量のデータがSQLServerに溜まっているならそっち使えばいいけど
Excelでデータ入力とか考えただけでも吐きそう
2019/03/11(月) 23:17:24.96ID:sG7ktWvJ0
まだやってんのかよ
2019/03/11(月) 23:24:53.12ID:tsrenNBW0
>>856
フロントでやるのはデータ分析だろう。
データ入力は現場の仕事。
フロントと現場を混同してるだろ?
2019/03/11(月) 23:31:06.64ID:tJkNrW1I0
二人以上でAccess使うなんて想像してなかったわ。すまん
2019/03/12(火) 01:08:58.03ID:aDT3+eco0
>>858
データ入力画面もフロントだよ。
現場でどうデータ入力させようとしてるのか書いてみろよ。
2019/03/12(火) 01:16:33.47ID:VCAYIPgk0
あの〜そろそろ〜
2019/03/12(火) 01:28:26.03ID:Ed2A5qJf0
ID:tsrenNBW0

馬鹿は早く死ねよ
2019/03/12(火) 01:58:18.19ID:ZdQx8dmlx
端から見てると何でこの人たちがVBAやらされる羽目になってるのか分かるよね
2019/03/12(火) 06:19:34.26ID:bIQY567R0
むしろこんな奴等に何かやらせる羽目になってる上司に同情するわ
2019/03/12(火) 07:21:53.89ID:hut6v0dp0
弊社では無理です
2019/03/12(火) 07:54:30.64ID:HcsazPCZH
2日ぶりに覗いたらまだ同じ話してて草
2019/03/12(火) 08:15:48.17ID:hut6v0dp0
うちなんかSQLServer導入して部署内誰でも使えるようにセッティングしてるのにずっとAccess使い続けてる。
Excel VBAからADOで繋げてるパターンなんで移行は手間じゃないと思うんだけど2〜3人が試しに使い始めただけ。
思い通りになんていかないよ。
社内稟議通した人がお気の毒w
2019/03/12(火) 08:18:57.13ID:xgWEcpqAd
>>854
八ァ?
>>729から始まってるんだよな。
その前に「デ―タはExcelじゃなくてAccessに置け」なんて意見が何処にある?
>>729の前にAccessのことを言ってるのは>>728しか見当たらないんだが。

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

その上、「今時Access」?
お前は一体何様だよ。
どっちが上から目線だ?
上から目線でも回答が頓珍漢じゃなければセンスね―なんて書かね−よw
2019/03/12(火) 08:24:06.51ID:xgWEcpqAd
>>867
それはちょっと悲しいね。
まあ、ファイル単位で移動出来るメリットもあるからDBサーバーあってもAccess単体ってのもあり得るけどな。
2019/03/12(火) 10:47:16.64ID:InKVz4tPM
>>867
それはね、ローカルに置いてる(としとこう)Accessの中に人に見せられないデータがあるからだよw
2019/03/12(火) 12:45:42.87ID:fAXK62aoM
>>867
そもそもそれエンジンの話なのか帳票とかのデザインの話なのかはっきりしてくれ
あと人は今困ってないなら移行なんてしないよ、トラブル招くかもしれないしな
移行させたいならAccess使用禁止ぐらいしないとダメ
どうせ導入した奴もそこまで腹くくってないだろ
2019/03/12(火) 13:22:50.41ID:Kg1wec9nM
>>870
本当にあったりしてなw
2019/03/12(火) 15:31:02.26ID:4U4zzI9jM
>>867
SQLサバだとテーブル設計とか後からいじりにくいんだよな
連結フォームに全データ表示!とかも気楽に出来なくなるし
2019/03/12(火) 18:07:30.07ID:0BPWRBQDa
>>867
もしかしてクライアントサイドの管理ツールとか知らないのでは?
2019/03/12(火) 21:59:22.23ID:hut6v0dp0
>>871
テーブルを移行して欲しいんだけどやってくれないって状況
導入した人は権力があるのでそのうち強制するかも
2019/03/12(火) 22:19:10.50ID:aDT3+eco0
>>875
移行するメリットがないとねぇ
レコード数が少ないと速度なんてほとんど変わらないし…
100万レコードでも、きちんと作られてればAccessでも十分実用になるし…

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

逆に言うと、軽いデータや処理のmdbは移行後回し。(というより、そんなの移行しなくてよろしい。労力に見合わない)
2019/03/12(火) 22:41:48.72ID:aDT3+eco0
>>876
いきなりストアドで大規模ロジックを書こうとしても、どう書くべきか(どう書くのがふさわしいか)わからないと思う。
小ロジック大量レコード処理辺りから書いていきましょう
2019/03/12(火) 22:50:26.01ID:hut6v0dp0
>>876
自分含め誰もspとか知らない
一般的なプログラミングは割とできて、みんなVB/VBA、C#、C++、rubyとかでなんとかしようとしてる
まさにDBを箱としか見てない
2019/03/12(火) 23:05:56.66ID:0BPWRBQDa
ストアドはRDBの設計思想に反する邪悪な存在なので可能な限り避けるべきです
最適化をかけにくいのでインデックスの効いたクエリに比べて速度も遅くなります
2019/03/12(火) 23:30:38.78ID:hut6v0dp0
>>879
マジで!?
2019/03/12(火) 23:43:55.90ID:hqmBJoBXa
Webシステムで全て開発側の手元にあるんならストアドなんか害悪しかないけど、
VBAだったらストアドやビューを最大限に活用して可能な限りDBMS側に寄せるべき
神VBAは作りっぱなしで逃げられるならいいけど、後々Excel側の変更やDB側のスキーマ変更で地獄を見ることになる
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だからインターフェース変えずにできた。
せっかくツールったんだから移行しろよ!
と思ってたけどもう何がいいのかわからんくなった。
2019/03/13(水) 00:27:28.10ID:lH3YwFhl0
>>875
それエンジンだけをすげ替えろって言ってるってことだよね?
そりゃわざわざ移行しないよ
メリットないから強権発動しかないと思うよ
2019/03/13(水) 00:29:37.94ID:lH3YwFhl0
>>880
>>879はなんか勘違いしてるだけ
ストアドは簡単に言うとサーバー側でロジックが動くだけの話だからインデックスが効くかどうかはストアドが発行するSQLに依存する
2019/03/13(水) 00:41:34.27ID:jknGRCgKa
>>884
879が批判してるのは、ストアドの中でループしたり一時テーブルを安易に多用したりするような使い方じゃないのかな
2019/03/13(水) 00:41:51.32ID:wiEoxIAU0
>>882
そのめんどくさいselect文を作るのがaccessやssmsじゃね?
2019/03/13(水) 00:46:32.81ID:A37ahhw6a
>>884
インデックスが効かないとは言ってませんが?

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

逆にストアドは手続き型なので基本的に定義した順に処理が逐次実行されます
全く最適化できないわけではありませんが宣言的な言語と比べるとこの順序があるという性質のせいで制約が強く最適化のかかりが弱くなります
2019/03/13(水) 00:50:37.91ID:jknGRCgKa
>>887
理念には同意するけど、VBAスレでそれ言う?
Excel VBAこそ、本来は宣言型であるものを手続き型に落としてしまいパフォーマンスを低下させている例の最たるものだよ
2019/03/13(水) 00:52:52.41ID:lH3YwFhl0
>>885
変な使い方を前提にストアドが遅いとか言われても困る
2019/03/13(水) 00:55:59.30ID:jknGRCgKa
>>889
実際、ぐるぐるSQLを書いちゃうような人はDBに寄せた設計になるとストアド使いたがるからね
2019/03/13(水) 00:57:03.71ID:lH3YwFhl0
>>887
だからその逐次実行を行うのがクライアントなのかサーバーなのかが違うだけでしょ
そりゃストアドと単一のSQL比べたらストアドの方が遅いだろうけどクライアントが同様の処理すること思えば全体としては(ちゃんと設計されてりゃ)速くなるでしょ
2019/03/13(水) 00:59:49.50ID:wiEoxIAU0
>>891
SQLをコンパイルする必要がないからストアードの方が速くね?
2019/03/13(水) 01:13:08.97ID:GE2OVSGdM
>>892
理論的にはそうだけど、現実にはそこは全く関係ない
SQLのコンパイル時間はサーバーとの通信のコストと比較すれば無視してよい
2019/03/13(水) 01:22:09.36ID:jknGRCgKa
そもそもSQLの発行がパフォーマンスに響くような状況はSQLの粒度が小さすぎる
大抵そういう時はうまく纏めれば一桁速くなる
2019/03/13(水) 01:32:35.47ID:A37ahhw6a
>>891
アプリケーションとストアドの比較をしているのではなく同じ結果をもたらすSQLとストアドの比較をして言った
そもそもアプリケーションに書かれたビジネスロジックをそのままストアドに移植する時点で論外なので比較する発想がなかった
2019/03/13(水) 04:57:47.34ID:lH3YwFhl0
>>895
> 同じ結果をもたらすSQLとストアドの比較をして言った
そりゃSQL単体で書けるならその方が速いわなw
SQL単体で書けるのにストアド使うとか普通あり得ないでしょ?
2019/03/13(水) 06:19:07.90ID:A37ahhw6a
>>896
残念ながらありえます
しかも少なくありません
単にSQLが苦手な人
ストアドの方が速いと思ってる人
深く考えずアプリケーションコードストアドに移植してしまう人
SQLでいいのにストアドを書いてしまう人というのは何処にでも居ます
2019/03/13(水) 06:45:04.68ID:JacIk+SfM
>>897
>>889
お前の周りのことなんか知らんよw
2019/03/13(水) 07:00:38.50ID:A37ahhw6a
>>898
このスレッドにもいましたよね
2019/03/13(水) 07:12:08.08ID:JacIk+SfM
何を言いたいのかさっぱりわからんw
2019/03/13(水) 08:04:29.56ID:A37ahhw6a
煽りか
902デフォルトの名無しさん (ワッチョイ 9290-uGU8)
垢版 |
2019/03/13(水) 10:36:45.92ID:4v7XhTis0
一体いつまで同じ話をぐだぐだ続けるつもり?
プログラマ板のどっか雑談スレでやれよ低能プログラマどもは
2019/03/13(水) 11:12:26.48ID:JQlBKVP4M
だってここ以外ではマウントとれないんだもの
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)はこの先いろいろな操作をすることになるため、そのたびに
どこに隠れているか分からない数式エラーをチェックするのは大変なのです
2019/03/13(水) 15:24:34.25ID:6SLKDaoM0
ごめんなさい
>>904は取り消します

何か他の要因がからんでエラーが起きていたようです
上の例だとエラーはおきませんでした

ごめんなさい
2019/03/13(水) 15:25:55.52ID:ril+FLd/0
とりあえず
Dim ary() As Variant
はエラーが出るので
Dim ary As Variant
に変更している
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文とかで、数字が入力されていなかったら名前をつけるのを終わるみたいなできたら嬉しいです。
2019/03/13(水) 15:27:20.71ID:ril+FLd/0
>>905
あ、はい。
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
2019/03/13(水) 16:22:51.30ID:kv9h9xOp0
以前、ifの条件に合わない時に実行したい時はthenに続けてelseと書いて実行したい内容を書くよりも、条件をnotで括った方が処理が速いと言われました
実際に計測したら確かに僅かな差が有ったのですが何故なのでしょうか
2019/03/13(水) 17:11:51.63ID:mnfDUUl9d
>>909
ありがとうございます!
やってみます!
2019/03/13(水) 20:59:56.96ID:p9thMYjCx
>>910
Ifブロックは先頭の条件から逐次Boolean評価していって、一度Trueと判定されるとそこで条件を満たす場合の処理を実行し、残りの条件は評価しない仕組み
Elseのケースでの処理を実行するとなると、If条件とそれ以降のElseIf条件全てにおいてTrueが成立しないという条件が必要になる
なので、同じ条件数のIfブロックで比較すると、Elseより前に置かれた条件で処理を行わせる方がElse以降で処理させる場合よりも条件評価を行う回数が少なくなる
913デフォルトの名無しさん (ワッチョイ 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という評価をしてるという事でしょうか
914デフォルトの名無しさん (オッペケ Src7-t9Np)
垢版 |
2019/03/13(水) 21:39:18.39ID:hyG2utnjr
>>912
VBAはショートサーキットしないけどな
2019/03/13(水) 21:40:15.61ID:uWZ9EglX0
>>912
何か微妙に勘違いしてる?
Elseifは関係ないぞ
2019/03/13(水) 21:43:27.67ID:uWZ9EglX0
>>913
elseという評価はしていない
評価というのは、判定してると言っていると思うが、判定はifのとこで終わってる
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種類ないよね
2019/03/13(水) 21:54:09.23ID:mPSJoOjB0
ショートサーキットないおかげでどんどんネストしてゆく…
2019/03/13(水) 22:06:55.44ID:x7l49vOfa
ショートサーキットなんてねえよw
2019/03/13(水) 22:10:56.03ID:Blqbf86O0
>>919
A、B、C全部必ずチェックすんだね
2019/03/13(水) 22:39:10.74ID:BElBpZaB0
>>917
そういう場合は
Select Case False
Case A, B, C
' !( A && B && C)の場合の処理
Case Else
' A && B && C の場合の処理
End Select

と書けばショートサーキットになるよ。
直感的じゃないけどね。
2019/03/13(水) 22:41:50.24ID:MTZmUGDO0
不慣れな初心者ですみません

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

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

本当はリストからボタン1つで書類シートとデータ送信用シートができれば最高なのですが
そこまでの改変は難しそうで…
2019/03/13(水) 22:46:46.17ID:TdaaOBVz0
>>922
それぞれのボタンに組まれたマクロを一つのボタンにまとめる
2019/03/13(水) 22:48:55.81ID:ril+FLd/0
作り直した方が遥かに楽なパターン
2019/03/13(水) 22:53:39.78ID:TdaaOBVz0
ごめん>>923は内容勘違いなので忘れて
一括で送信シート作るボタンを一つ作ってその中に、

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

ってのはどうですか
2019/03/13(水) 23:04:41.65ID:ril+FLd/0
>>922
見られちゃマズイデータ消してアップロードすれば誰かが作ってくれると思う
2019/03/13(水) 23:09:57.29ID:Blqbf86O0
>>921
そんな技があったのね。 ありがと
2019/03/13(水) 23:13:30.84ID:nm3P40mI0
Clickを呼んでも、クリックするわけじゃないが、
クリックされちゃいそうで怖い。
2019/03/14(木) 01:04:48.38ID:D/xLb5AQ0
ピボットテーブルの集計結果使いたい時って今まで計算用シートで作成→せる決め打ちで取得 てやってたんだけど稀にカラムずれる
こういうのvbaだけで計算する関数とかないよね?
2019/03/14(木) 01:36:50.73ID:lGFaI2Uva
ピボットテーブルはアドホックな集計や分析に使うもんだろ
やることが決まってるんなら要らん
2019/03/14(木) 04:24:36.89ID:ci+9chmP0
>>922
現物見てないからよくわからないんだけど、
リストシートや書類シートにボタンがついてるってのは
マクロ有効ブックの中にそれらのシートがあるってこと?

出来ればデータとマクロは別のブックに分離しといたほうが良いんじゃないかな。
そういう作りにしてれば改修も簡単になりそう。
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を気にせず使うな。
2019/03/14(木) 08:39:22.13ID:ssjF3MUN0
>>932
Aが成り立たないときBを評価するとエラーで止まってしまう場合とかが悩ましいんだ
2019/03/14(木) 09:04:59.36ID:Nl2IbJZtM
>>921
それ保証されてるんだっけ?
2019/03/14(木) 09:13:36.88ID:laeryNOTM
>>932
うん、他にやることありそうな気がするぞ
昔の俺みたいに実はコンパイルしてなかったとか笑
2019/03/14(木) 09:57:51.33ID:ssjF3MUN0
>>934
一応言語規格上保証されてるね
2019/03/14(木) 10:12:09.94ID:Nl2IbJZtM
>>936
どこかでドキュメント化されてる?
2019/03/14(木) 10:14:23.93ID:hUI7fwKe0
なんとなくだけど、VBAであまり離れ業を使わないほうが良いとは思う
2019/03/14(木) 10:34:24.95ID:ssjF3MUN0
>>937
https://docs.microsoft.com/en-us/openspecs/microsoft_general_purpose_programming_languages/ms-vbal/d5418146-0bd2-45eb-9c7a-fd9502722c74
にある Published Version の PDF の 5.4.2.10 Select Case Statement に書かれている。
82ページの一番下二行だね。
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
とするかと言えば、普段はやらないということ。

それで得られる速度アップより他の修正をした方がよっぽど効果有るだろ。
2019/03/14(木) 12:53:41.51ID:CJd9O/FZd
アスペかよ
2019/03/14(木) 13:54:08.96ID:3EvgP48J0
>>939
なるほど、ちゃんと明記されてるんだな、ありがとう
2019/03/14(木) 13:57:37.28ID:3EvgP48J0
短絡評価の件で速度云々言ってるのはID:YBKQY7Hwdだけだし
2019/03/14(木) 14:46:00.52ID:zjiIQsBqM
いやいや、役に立った(参考になった)ボタン押してますから
2019/03/14(木) 15:13:23.25ID:ONwCUS8k0
ショートサーキットが活きてくるのは、Boolean型の関数を並べるときだな
If Func1() Or Func2() Then
みたいなケースだと実行時間がかなり違ってくることも起こりうる
2019/03/14(木) 15:21:32.05ID:Cgb2oqJn0
標準関数の戻り値に文字列"false"が返ってくる言語があるらしい
2019/03/14(木) 19:08:46.48ID:YBKQY7Hwd
>>943
伝わって無いようだな。

まず、>>910の速度の話から始まっている。
で、>>932は「俺は」速度を気にしないから普段はやらないけど、とにかくネストすりゃ良いって話。

>>927に速度が念頭に無かったとしても>>932は成立するんだよ。
2019/03/14(木) 19:08:54.68ID:YBKQY7Hwd
で、>>933は俺が普段やらないという所に反応したわけだ。
それに対して>>940はBのエラーが想定される時は普段もネストするって話。
こちらも成立してる。

あえて言えば>>933が少し外してる。
2019/03/14(木) 19:33:40.81ID:3EvgP48J0
>>947-948
速度の話(>>910)と短絡評価の話(>>917)は別な
混同してるのはお前だけだぞw
2019/03/14(木) 19:58:36.19ID:YBKQY7Hwd
>>949
バーカw

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

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

このついでに反応した>>933は「俺が最初に蒸し返した」のでは無く、「俺が>>917を勘違いした」と思ったんだろう。
2019/03/14(木) 20:19:12.86ID:RaCvNH3Xa
もっと争え
2019/03/14(木) 20:22:35.66ID:3EvgP48J0
何だこいつ
お前が常にネストするとかどうでもいいよw
953名無し (アウアウウー Sae7-9Z9t)
垢版 |
2019/03/14(木) 20:51:32.45ID:qOCswbNsa
のび太 ドラえもん、なんか道具出してよ
ドラえもん まーまー棒、 ――――◯
2019/03/14(木) 21:48:30.17ID:yFX6qcia0
ID:YBKQY7Hwd

こいつが一番バカっぽい w
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
2019/03/14(木) 22:54:56.95ID:ssjF3MUN0
ここで「データをExcelに置くのはやめてSQLSeverとかに格納しよう」って答えたら荒れるのかな?
2019/03/14(木) 23:06:23.27ID:3EvgP48J0
いや、ここはAccessの出番でしょ
って更に混乱に陥れるとか?
2019/03/14(木) 23:10:10.38ID:YBKQY7Hwd
>>952
頭に血が上ってるようだな。
別に>>932はこうしろだなんて言ってないんだが。

それを言うなら反応した方がずれてるだろ。
2019/03/14(木) 23:11:32.83ID:YBKQY7Hwd
日本語のやり取りが出来ない奴ばかりw
2019/03/14(木) 23:25:05.84ID:KDf9lyPv0
>>955
何だそれwwwww
印刷画面にIndex関数を埋め込んでおけば、
5行くらいで書けるんじゃないのwwwww

で、まとめる方法だけど、やっぱAccessを勧めるな。
Excelでも出来るけど、餅は餅屋だとわかる方がいい。
2019/03/14(木) 23:28:37.01ID:YBKQY7Hwd
勝手に人のことを推測して反応したら、推測の当てが外れて相手から否定的な意見をもらって怒り爆発って事態がこのところ続いているようだw
2019/03/14(木) 23:32:27.61ID:Cgb2oqJn0
>>955
accessって意見が多いけど、俺はvbaでやるかな

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

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

・納期はどこからどこまでか?最短?最長?平均?
・数量もどうまとめるのか?
・品番はどう表記するの?
など、山程考える事がある
2019/03/14(木) 23:32:30.81ID:KDf9lyPv0
ていうか2009年って。
書いた本人も、内心消したいと思ってるんじゃないのそれ。
当時は良くても、10年後にActiveCell.Offset(1, 0).Selectとか見たら、
あちゃー(ノ∀`)だと思う。
2019/03/14(木) 23:34:16.79ID:Cgb2oqJn0
ActiveCellのoffsetでSelectとかなかなかやね
マクロの記録でもないだろうから、一生懸命頑張ったんかなって
2019/03/14(木) 23:41:27.79ID:S0hknHQca
>>955
ランサーズとかで依頼したら?
ゴミみたいな値段で誰か作ってくれるよ
2019/03/14(木) 23:43:49.65ID:UkRoSI4o0
>>955
馬鹿は死ねよ
2019/03/14(木) 23:50:37.23ID:KDf9lyPv0
ん、ちょっと待った。
注文書を印刷?
今時そんなことやったら、受け取る方は嫌がると思う。
どうしても紙にするなら、
見た目の格好良さなんか度外視で、
QRコード・品名・数量・納期を、ただ羅列するだけの方がいいよ。
パソコンなんか使ってないような、クソ田舎の店に注文出すわけじゃないんでしょ?
2019/03/14(木) 23:59:36.30ID:39aguKNH0
>>955
できるだけ単純な方法だと、
・リストにマクロ用の作業列を1列用意する
・マクロ開始時に作業列をクリア
・ループ内で印刷シートにデータを入れ込む前に、その行の作業列が空白かどうか見る
 空白なら印刷シートに社名とデータ入れて、作業列に1とか適当に入れる
 FindとFineNextで同じ社名全部検索して、1個目と同じように見つかった行の作業列に何か入れてデータを印刷シートに入れる
・印刷実行
2019/03/15(金) 00:00:20.90ID:cOSRxez60
FineNext→FindNextね
2019/03/15(金) 00:00:30.62ID:mu0sfa7H0
>>962
そこでさらに
Driver = {Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}
使えといって混乱させる
2019/03/15(金) 00:02:04.33ID:5fRBFExt0
批判とかする気持ちは分かるけど、だったらダイマ批判の覚悟でそれ相応のサービスを紹介してあげてはどうかな
さすがにそろそろvbaで請求関係は終焉させてあげたい。よく20年も頑張ったよ
2019/03/15(金) 00:04:22.44ID:5fRBFExt0
まぁ俺はgoogleanalyticsのマイレポートをctrl+aでコピー*3、EXCELに貼り付け
多様な角度からレポート生成
なんてシステム作ったけどな
役に立ってるかは知らん
2019/03/15(金) 00:04:59.41ID:BXhkH+980
>>955
Accessわかる人は、何も悩むところがない
わからなければ、Accessの勉強で苦労するか、ExcelVBAで苦労するか
好きな方選べばいい
2019/03/15(金) 08:35:06.36ID:8vQK+5mFd
>>955
業務の内容から考えるとAccessのが良いっぽいんだけど、規模によるかな。
注文する会社はどれくらいあって、この注文書ってどれくらい印刷するのか。

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

>>963
全く同意だけど、記事の内容を見ると初めてVBAを触る人向け第2回って感じだから、マクロ記録をちょっとだけ改変って感じなんじゃない?
2019/03/15(金) 08:37:29.81ID:7wpKi9ozH
馬鹿はスレタイが読めない
2019/03/15(金) 08:42:37.51ID:CgxPaElB0
馬鹿は頭が固い
2019/03/15(金) 08:53:15.07ID:mu0sfa7H0
>>970に書いたのは冗談じゃなくて、データは専用の別ブックに置くようにして、マクロ(と印刷用画面)と分けた方がいい。
データブックからの読み取りはSQLでやる。
こうすれば将来のDB化にも繋がるよ。
2019/03/15(金) 09:01:55.29ID:8vQK+5mFd
マクロというものを知ったばかりの人にSQLとか言い出すってどうなんだろう?

そういう所だよ。
2019/03/15(金) 09:30:17.24ID:7wpKi9ozH
>>977
じゃあ最初からDB使え
後で使うだろうと無駄な設計やコードを残していったアホの後任が不憫でならない
2019/03/15(金) 10:04:11.53ID:mu0sfa7H0
マジで?!
2019/03/15(金) 10:54:37.46ID:sIXN3DPHM
>>977
データを分けたらAccessのリンクテーブルにもできるだろうから、徐々に移行ってこともできるよね
2019/03/15(金) 11:44:43.49ID:pQ5gXJpBM
wordに差し込み印刷という……
2019/03/15(金) 13:49:10.01ID:07U/buSjM
データの保存はiniファイルと隠しシートどっち使うのがスタンダードなの?
2019/03/15(金) 13:54:39.91ID:/jMwhNVt0
普通に表示しているシート
後iniファイルって古い。今はxmlが主流だよ
2019/03/15(金) 14:53:36.22ID:BdW6uHhE0
iniファイルってデータの保存用とかじゃなくプログラムの設定用だろ?
まぁどちらにしろ古いけどさ。
2019/03/15(金) 18:22:20.40ID:jUtd0ALV0
この前、セルに _(数字)の名前を付けたものです。
(数字)は変数として定義してあるのですが、
アンダーバーが使えないため、_(数字)を参照できません。

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

Suji = "_" & (数字)

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

どうやったらその名前を付けたセルを参照できますか??
2019/03/15(金) 18:24:03.29ID:fZ/zfvrlM
君プログラミング向いてないからやめた方がいいよ
2019/03/15(金) 18:28:03.12ID:luJRKRBO0
>>986
論外
2019/03/15(金) 18:29:21.03ID:sIXN3DPHM
俺の脳みそだと翻訳できんわ
2019/03/15(金) 18:39:53.23ID:XS3ylKm2a
_2 って名前を付けたセルを
どうやったら呼び出せるのかなって

2の部分は入力によって変えたいから
どうしたもんやらって

分かりづらくて、センスなくてごめんね。
2019/03/15(金) 18:53:39.56ID:luJRKRBO0
Suji = “_2”
Range(“A1”)=Suji
はできたけど
Range(Suji).Select
はエラーになるのはなぜか
2019/03/15(金) 18:56:58.01ID:3iBx3zPfa
>>991
意味が全く違うからとしか言いようがない
まずはどういう結果を期待してて何故それでうまくいくと思ったのかを晒せ
2019/03/15(金) 18:58:53.06ID:luJRKRBO0
>>992
本人に聞け
ドジっ子かよ
2019/03/15(金) 19:43:27.31ID:cOSRxez60
>>986
その記述で参照できる
その呼び出したい名前の定義の「範囲」はブック?
2019/03/15(金) 19:58:09.38ID:KbM/PflUF
>>984
今のところ、次の主流はとくに決まってないよ
jsonもけっこう幅広く使われてるし、ほかにもいろいろなデータ記述法が登場してる
2019/03/15(金) 20:05:31.49ID:3iBx3zPfa
MSに忠誠を誓うなら今はJSONだね
最近のMSはXMLをどんどん排除してJSONに置き換えてる
2019/03/15(金) 20:42:29.36ID:ng8+eCdqM
>>983
データの量によるけど少量ならCustomDocumentPropertiesかな
2019/03/15(金) 20:43:10.21ID:ng8+eCdqM
>>996
JSONいいんだけどコメントが書けないのがなぁ
2019/03/15(金) 20:53:54.46ID:mu0sfa7H0
>>997
一項目あたり225文字が限界っぽいけどね。
ちょっとスマートな感じがするから一度使ってみようと思いつつまだ機会がない。
2019/03/15(金) 20:55:03.42ID:mu0sfa7H0
>>999
225じゃない255だ
225は日経
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を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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