Excel VBA 質問スレ Part59

■ このスレッドは過去ログ倉庫に格納されています
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/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
基本的なことを理解せず、ソース書くやつって恥ずかしくないのかな?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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