探検
Excel VBA 質問スレ Part51
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん (スププ Sd4a-O827)
2017/11/08(水) 11:26:30.13ID:+KUB1/9hdスレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
※前スレ
Excel VBA 質問スレ Part50
http://mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
867デフォルトの名無しさん (バットンキン MM7a-Yq9l)
2018/01/12(金) 23:46:18.93ID:WKndAwKhM いやExsel 2007もサポート切れてますが
868デフォルトの名無しさん (ワッチョイ eab3-0PCX)
2018/01/13(土) 03:26:50.74ID:0Hr8k8ED0869デフォルトの名無しさん (ワッチョイ 6a1e-53ns)
2018/01/13(土) 09:26:06.50ID:60QkmGs40 試してないけど、プロパティのTabIndexも駄目だったの?
870デフォルトの名無しさん (ワッチョイ 118a-zETe)
2018/01/13(土) 10:05:22.76ID:8yN0Kzpj0 ThisWorkbook.Application.Hwndでブックのハンドルを取得して、
SetLayeredWindowAttributesで透過処理をする時、
LWA_ALPHAでは問題ないのに、
LWA_COLORKEYに変えると、なぜかブック全体ではなく、
シート上に最初に配置したコマンドボタンの方に誤爆します。
しかも、自分のPCでは問題ないのに、他人のPCだと誤爆するという意味不明さ。
ハンドルがずれる的なバグでもあるのでしょうか?
SetLayeredWindowAttributesで透過処理をする時、
LWA_ALPHAでは問題ないのに、
LWA_COLORKEYに変えると、なぜかブック全体ではなく、
シート上に最初に配置したコマンドボタンの方に誤爆します。
しかも、自分のPCでは問題ないのに、他人のPCだと誤爆するという意味不明さ。
ハンドルがずれる的なバグでもあるのでしょうか?
871デフォルトの名無しさん
2018/01/13(土) 10:12:39.30 ウィンドウ表示時にフォーカス当てたいんならTabIndex=0にすればいいんだと思うけど、
あとはフラグを使ってInitialize直後のActivateイベントでフォーカスを当てればいいんじゃね?
Private mblnInitFlag As Boolean
Private Sub UserForm_Activate()
If mblnInitFlag Then
TextBox2.SetFocus
mblnInitFlag = False
End If
End Sub
Private Sub UserForm_Initialize()
mblnInitFlag = True
End Sub
あとはフラグを使ってInitialize直後のActivateイベントでフォーカスを当てればいいんじゃね?
Private mblnInitFlag As Boolean
Private Sub UserForm_Activate()
If mblnInitFlag Then
TextBox2.SetFocus
mblnInitFlag = False
End If
End Sub
Private Sub UserForm_Initialize()
mblnInitFlag = True
End Sub
872デフォルトの名無しさん (ワッチョイ b5b3-DdNP)
2018/01/13(土) 10:19:25.53ID:WLDq+ue70 一つ目の表
A,B,C,D,E
aaa,bb,cc,00,20
bbb,cc,dd,11,30
二つ目の表
G,H,I,J,K
aaa,bb,cc,00,10
bbb,cc,dd,11,10
上の様な表があり、一つ目のABC列と二つ目のGHI列の値が一致すれば、二つ目の表の横にE列からK列の数値を引いた値を表示したい。
一致するデータが無ければ、一致データ無しと表示。
上の表だと2つ目の表の右列に、それぞれ10,20と表示。
データ量は300~800程です。
出来る方、よろしくお願いします。
A,B,C,D,E
aaa,bb,cc,00,20
bbb,cc,dd,11,30
二つ目の表
G,H,I,J,K
aaa,bb,cc,00,10
bbb,cc,dd,11,10
上の様な表があり、一つ目のABC列と二つ目のGHI列の値が一致すれば、二つ目の表の横にE列からK列の数値を引いた値を表示したい。
一致するデータが無ければ、一致データ無しと表示。
上の表だと2つ目の表の右列に、それぞれ10,20と表示。
データ量は300~800程です。
出来る方、よろしくお願いします。
873デフォルトの名無しさん
2018/01/13(土) 10:29:13.82874デフォルトの名無しさん (スッップ Sd0a-YX4c)
2018/01/13(土) 10:31:29.99ID:uYJANG/vd 既存プログラムで引数が多いやつを減らしたいんだけどどうすればいい?
ただグローバル変数使うと他のアプリケーションに影響出るから使えない。
今から構造化やクラスにするのは名前変更が大変そうだし、同じ型でも同じ動作でもないからまとめにくい。
ただグローバル変数使うと他のアプリケーションに影響出るから使えない。
今から構造化やクラスにするのは名前変更が大変そうだし、同じ型でも同じ動作でもないからまとめにくい。
875デフォルトの名無しさん (ワッチョイ 118a-zETe)
2018/01/13(土) 10:39:42.82ID:8yN0Kzpj0 >>873
それが、コマンドボタンとシートの色を同じにしても、
コマンドボタンの方だけ透過されるんです。
しかも最初に配置したコマンドボタンだけ。
2個目以降は変わらず。
透過の前後で、ハンドルの値をデバッグプリントしても変化ないですし。
それが、コマンドボタンとシートの色を同じにしても、
コマンドボタンの方だけ透過されるんです。
しかも最初に配置したコマンドボタンだけ。
2個目以降は変わらず。
透過の前後で、ハンドルの値をデバッグプリントしても変化ないですし。
876デフォルトの名無しさん
2018/01/13(土) 10:49:24.82 >>872
2007以降限定でよければL列に計算式埋め込んじゃうけどね
=IF(COUNTIFS($A:$A,$G1,$B:$B,$H1,$C:$C,$I1)>0,SUMIFS($E:$E,$A:$A,$G1,$B:$B,$H1,$C:$C,$I1)-$K1,"一致データ無し")
2007以降限定でよければL列に計算式埋め込んじゃうけどね
=IF(COUNTIFS($A:$A,$G1,$B:$B,$H1,$C:$C,$I1)>0,SUMIFS($E:$E,$A:$A,$G1,$B:$B,$H1,$C:$C,$I1)-$K1,"一致データ無し")
877デフォルトの名無しさん (ワッチョイ 118a-zETe)
2018/01/13(土) 11:20:55.87ID:8yN0Kzpj0 ちなみに、こんなのです。
Sub test(ByVal Flg As Boolean)
Dim Hwnd As Long: Hwnd = ThisWorkbook.Application.Hwnd
Call SetWindowLong(Hwnd, -20, &H80000)
If Flg Then
Call SetLayeredWindowAttributes(Hwnd, 0, 200, 1) '←成功
Else
Call SetLayeredWindowAttributes(Hwnd, 0, 200, 2) '←コマンドボタンに誤爆
End If
End Sub
変えているのは最後の引数だけなんですが。
Sub test(ByVal Flg As Boolean)
Dim Hwnd As Long: Hwnd = ThisWorkbook.Application.Hwnd
Call SetWindowLong(Hwnd, -20, &H80000)
If Flg Then
Call SetLayeredWindowAttributes(Hwnd, 0, 200, 1) '←成功
Else
Call SetLayeredWindowAttributes(Hwnd, 0, 200, 2) '←コマンドボタンに誤爆
End If
End Sub
変えているのは最後の引数だけなんですが。
878デフォルトの名無しさん
2018/01/13(土) 11:27:43.02 >>874
Sub test1()
Dim args(5) As Variant
Dim arg1 As String
Dim arg2 As Long
Dim arg3 As Variant
Dim arg4 As Workbook
Dim arg5 As Collection
arg1 = "test"
arg2 = 123
arg3 = ActiveSheet.Cells(1, 1)
Set arg4 = ActiveWorkbook
Set arg5 = New Collection
arg5.Add New DataObject
arg5.Item(1).SetText "sample"
args(1) = arg1
args(2) = arg2
args(3) = arg3
Set args(4) = arg4
Set args(5) = arg5
Call test2(args)
End Sub
‘ ――
Sub test2(ByRef args As Variant)
Dim arg1 As String
Dim arg2 As Long
Dim arg3 As Variant
Dim arg4 As Workbook
Dim arg5 As Collection
arg1 = args(1)
arg2 = args(2)
arg3 = args(3)
Set arg4 = args(4)
Set arg5 = args(5)
Debug.Print arg1
Debug.Print arg2
Debug.Print arg3
Debug.Print arg4.Name
Debug.Print arg5.Item(1).GetText
End Sub
Sub test1()
Dim args(5) As Variant
Dim arg1 As String
Dim arg2 As Long
Dim arg3 As Variant
Dim arg4 As Workbook
Dim arg5 As Collection
arg1 = "test"
arg2 = 123
arg3 = ActiveSheet.Cells(1, 1)
Set arg4 = ActiveWorkbook
Set arg5 = New Collection
arg5.Add New DataObject
arg5.Item(1).SetText "sample"
args(1) = arg1
args(2) = arg2
args(3) = arg3
Set args(4) = arg4
Set args(5) = arg5
Call test2(args)
End Sub
‘ ――
Sub test2(ByRef args As Variant)
Dim arg1 As String
Dim arg2 As Long
Dim arg3 As Variant
Dim arg4 As Workbook
Dim arg5 As Collection
arg1 = args(1)
arg2 = args(2)
arg3 = args(3)
Set arg4 = args(4)
Set arg5 = args(5)
Debug.Print arg1
Debug.Print arg2
Debug.Print arg3
Debug.Print arg4.Name
Debug.Print arg5.Item(1).GetText
End Sub
879デフォルトの名無しさん (ワッチョイ b5b3-DdNP)
2018/01/13(土) 13:04:46.60ID:WLDq+ue70 >>876
列の挿入や削除の処理があるので、数式だと参照ズレなどが起こってしまうので出来たらVBAで処理したいと考えています。
列の挿入や削除の処理があるので、数式だと参照ズレなどが起こってしまうので出来たらVBAで処理したいと考えています。
880858 (ワッチョイ 1188-/4a5)
2018/01/13(土) 13:29:13.07ID:eGapce6A0882デフォルトの名無しさん (ワッチョイ 5e9f-QpsD)
2018/01/13(土) 13:47:55.56ID:fyAvIt7m0 並べて比較って
人間が何かを見比べて確認しているわけだから
その作業は人間がやる必要ないとおもうので
全部VBAでバックグランドで処理すればいいのではないかと単純に思ってしまう
最後に比較した結果だけ表示してあげる
人間が何かを見比べて確認しているわけだから
その作業は人間がやる必要ないとおもうので
全部VBAでバックグランドで処理すればいいのではないかと単純に思ってしまう
最後に比較した結果だけ表示してあげる
883デフォルトの名無しさん (ワッチョイ 1188-/4a5)
2018/01/13(土) 15:21:57.51ID:eGapce6A0884デフォルトの名無しさん
2018/01/13(土) 16:53:07.70 >>883
> 比較する対象を特定する事は計算式でできない
意味分からん
=IF(COUNTIFS($A:$A,$G1,$B:$B,$H1,$C:$C,$I1)>0,SUMIFS($E:$E,$A:$A,$G1,$B:$B,$H1,$C:$C,$I1)-$K1,"一致データ無し")
この計算式を単純にVBAに置き換えて
With Worksheets("Sheet1")
If WorksheetFunction.CountIfs(.Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) Then
.Range(“L1”) = WorksheetFunction.SumIfs(.Range(“E:E”), .Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) - .Range(“K1”)
Else
.Range(“L1”) = “一致データ無し”
EndIf
End With
行列を変数で指定できるように.Rangeを.Columnsや.Cellsに置き換えて数値で指定できるようにして
With Worksheets("Sheet1")
If WorksheetFunction.CountIfs(.Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) Then
.Cells(1,12) = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) - .Cells(1,11)
Else
.Cells(1,12) = “一致データ無し”
EndIf
End With
あとは必要なところを変数化してループを回せばいいじゃん
Dim rngCell As Range
Dim lngRow As Long ‘ ループを回すため行番号を変数化
With Worksheets("Sheet1")
Set rngCell = .Cells(1, 12)
‘ 表の詳細仕様が分からないのでとりあえずK列が空じゃない限りループ続行
While rngCell.Offset(0, -1) <> “”
lngRow = rngCell.Row
If WorksheetFunction.CountIfs(.Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) Then
rngCell = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) - .Cells(lngRow,11)
Else
rngCell = “一致データ無し”
EndIf
Set rngCell = rngCell.Offset(1, 0) ‘ 次の行
Wend
End With
列の追加削除があるということだったら列番号も変数化すればいい
> 比較する対象を特定する事は計算式でできない
意味分からん
=IF(COUNTIFS($A:$A,$G1,$B:$B,$H1,$C:$C,$I1)>0,SUMIFS($E:$E,$A:$A,$G1,$B:$B,$H1,$C:$C,$I1)-$K1,"一致データ無し")
この計算式を単純にVBAに置き換えて
With Worksheets("Sheet1")
If WorksheetFunction.CountIfs(.Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) Then
.Range(“L1”) = WorksheetFunction.SumIfs(.Range(“E:E”), .Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) - .Range(“K1”)
Else
.Range(“L1”) = “一致データ無し”
EndIf
End With
行列を変数で指定できるように.Rangeを.Columnsや.Cellsに置き換えて数値で指定できるようにして
With Worksheets("Sheet1")
If WorksheetFunction.CountIfs(.Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) Then
.Cells(1,12) = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) - .Cells(1,11)
Else
.Cells(1,12) = “一致データ無し”
EndIf
End With
あとは必要なところを変数化してループを回せばいいじゃん
Dim rngCell As Range
Dim lngRow As Long ‘ ループを回すため行番号を変数化
With Worksheets("Sheet1")
Set rngCell = .Cells(1, 12)
‘ 表の詳細仕様が分からないのでとりあえずK列が空じゃない限りループ続行
While rngCell.Offset(0, -1) <> “”
lngRow = rngCell.Row
If WorksheetFunction.CountIfs(.Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) Then
rngCell = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) - .Cells(lngRow,11)
Else
rngCell = “一致データ無し”
EndIf
Set rngCell = rngCell.Offset(1, 0) ‘ 次の行
Wend
End With
列の追加削除があるということだったら列番号も変数化すればいい
885デフォルトの名無しさん (ワッチョイ f1f7-GMp/)
2018/01/13(土) 17:00:25.96ID:zzyV/8sb0 初心者で申し訳ありません
セルに入力した選手コードを選手名に置換するような動きをさせたいのですがどうするとよいでしょうか
別のシートに選手名簿は用意してありA列に選手コードB列に選手名があります
セルに入力した選手コードを選手名に置換するような動きをさせたいのですがどうするとよいでしょうか
別のシートに選手名簿は用意してありA列に選手コードB列に選手名があります
886デフォルトの名無しさん (ワッチョイ eab3-J7fK)
2018/01/13(土) 17:42:32.57ID:8qhapkmN0887デフォルトの名無しさん (ワッチョイ eab3-J7fK)
2018/01/13(土) 17:48:09.64ID:8qhapkmN0 すまん「置換」を見落とした
VBAは要るな
WorksheetFunction.VLookup でやるなり、ループで検索するなりやればいい
VBAは要るな
WorksheetFunction.VLookup でやるなり、ループで検索するなりやればいい
888デフォルトの名無しさん (アークセー Sxbd-IRwv)
2018/01/13(土) 17:50:29.11ID:gLbKwyK9x889デフォルトの名無しさん
2018/01/13(土) 17:58:56.84890デフォルトの名無しさん (アークセー Sxbd-IRwv)
2018/01/13(土) 18:00:41.47ID:gLbKwyK9x >>887
検索置換のダイアログでシート内の選手コードを一括変換する、みたいな手作業の業務手順をそのままマクロ化しようとしているのかもしれないし、そういう場合はそもそもシートの設計や業務手順に問題がある場合が多い。
最初にVLOOKUP使えと指摘したあんたの感覚は基本的には正しいと思うぞ。
検索置換のダイアログでシート内の選手コードを一括変換する、みたいな手作業の業務手順をそのままマクロ化しようとしているのかもしれないし、そういう場合はそもそもシートの設計や業務手順に問題がある場合が多い。
最初にVLOOKUP使えと指摘したあんたの感覚は基本的には正しいと思うぞ。
891デフォルトの名無しさん (ワッチョイ 5e9f-QpsD)
2018/01/13(土) 18:06:27.84ID:fyAvIt7m0 >>885
単発ならワークシート関数でやった方が簡単
VLOOKUPで変換したのを用意しといてそれをごそっと上書きする
何回もやるなら、上記をマクロにする
このくらいならマクロの記録でもいけそう
全部VBA上でやる方法もあるけどビギナーには大変でしょう
こんな感じでいいんじゃなかろうか
Dim i
i = スタートする行
Do While Not Worksheets(1).Cells(i, 1) = ""
Worksheets(1).Cells(i, 1) = WorksheetFunction.VLookup _
(Worksheets(1).Cells(i, 1), Worksheets(2).Range("名簿範囲"), 2, 0)
i = i + 1
Loop
シートのインデックスとかは書き換えてね
意味不明ならマクロ記録かさらなる修行をオススメする
単発ならワークシート関数でやった方が簡単
VLOOKUPで変換したのを用意しといてそれをごそっと上書きする
何回もやるなら、上記をマクロにする
このくらいならマクロの記録でもいけそう
全部VBA上でやる方法もあるけどビギナーには大変でしょう
こんな感じでいいんじゃなかろうか
Dim i
i = スタートする行
Do While Not Worksheets(1).Cells(i, 1) = ""
Worksheets(1).Cells(i, 1) = WorksheetFunction.VLookup _
(Worksheets(1).Cells(i, 1), Worksheets(2).Range("名簿範囲"), 2, 0)
i = i + 1
Loop
シートのインデックスとかは書き換えてね
意味不明ならマクロ記録かさらなる修行をオススメする
892デフォルトの名無しさん (アークセー Sxbd-IRwv)
2018/01/13(土) 18:07:34.63ID:gLbKwyK9x >>889
VBAに慣れてる人ならセル値の置換と聞いただけでワークシート更新イベントを使いたいのかなって思いがちだよな
俺も最初はそう思ったわ
でも質問者の質問内容を推測抜きで素直に読むとそうとは限らないんだよな
VBAに慣れてる人ならセル値の置換と聞いただけでワークシート更新イベントを使いたいのかなって思いがちだよな
俺も最初はそう思ったわ
でも質問者の質問内容を推測抜きで素直に読むとそうとは限らないんだよな
893デフォルトの名無しさん (ワッチョイ f1f7-GMp/)
2018/01/13(土) 18:19:24.76ID:zzyV/8sb0894デフォルトの名無しさん (ワッチョイ f1f7-GMp/)
2018/01/13(土) 18:35:21.45ID:zzyV/8sb0895858 (ワッチョイ 1188-/4a5)
2018/01/13(土) 18:44:45.15ID:eGapce6A0896デフォルトの名無しさん (アウアウカー Sa55-sebt)
2018/01/13(土) 19:03:27.44ID:rZTV+Qsta >>895
ファイル名とかシート名がランダムでないなら
固定値じゃないの?
どんなファイル名か分からない、シート名か分からないってなら都度入力するしかないな。
データ形式で特定することもできるけど、
無駄な作業にしか思えない。
ファイル名とかシート名がランダムでないなら
固定値じゃないの?
どんなファイル名か分からない、シート名か分からないってなら都度入力するしかないな。
データ形式で特定することもできるけど、
無駄な作業にしか思えない。
897デフォルトの名無しさん (アークセー Sxbd-IRwv)
2018/01/13(土) 19:18:42.64ID:gLbKwyK9x >>893
こんな感じならどうかな
以下は、実行すると報告用シート内に含まれる選手コード全てを一気に置換する
複数の選手コードを含む場合も一発で置換できるはず
名簿にはコードの欄が空白の行がなく、名簿シートのA2セル以下に選手コードが入力されているものと仮定してる(A1は表見出し)
セル値の一部が選手コードと一致する場合も置換されてしまうので、コードのみが入力されているセルの値だけを確実に置換したい場合、Replaceメソッドの引数のLookAt:=xlPart をLookAt:=xlWholeに変更してくれ
Sub ReplaceCode
Dim sh_list As WorkSheet '選手名簿シート
Dim sh_report As WorkSheet '報告用シート
Dim i As Long
Set sh_list = WorkSheets("選手名簿シート")
Set sh_report = WorkSheets("報告用シート")
For i = 2 To sh_list.Range("A2").End("xlDown").Row
sh_report.Cells.Replace What:=sh_list.Cells(i, 1).Value, Replacement:=sh_list.Cells(i, 2).Value, LookAt:=xlPart
Next i
End Sub
こんな感じならどうかな
以下は、実行すると報告用シート内に含まれる選手コード全てを一気に置換する
複数の選手コードを含む場合も一発で置換できるはず
名簿にはコードの欄が空白の行がなく、名簿シートのA2セル以下に選手コードが入力されているものと仮定してる(A1は表見出し)
セル値の一部が選手コードと一致する場合も置換されてしまうので、コードのみが入力されているセルの値だけを確実に置換したい場合、Replaceメソッドの引数のLookAt:=xlPart をLookAt:=xlWholeに変更してくれ
Sub ReplaceCode
Dim sh_list As WorkSheet '選手名簿シート
Dim sh_report As WorkSheet '報告用シート
Dim i As Long
Set sh_list = WorkSheets("選手名簿シート")
Set sh_report = WorkSheets("報告用シート")
For i = 2 To sh_list.Range("A2").End("xlDown").Row
sh_report.Cells.Replace What:=sh_list.Cells(i, 1).Value, Replacement:=sh_list.Cells(i, 2).Value, LookAt:=xlPart
Next i
End Sub
898858 (ワッチョイ 1188-/4a5)
2018/01/13(土) 19:32:04.47ID:eGapce6A0 >>896
ファイルのフォーマットが複数あるので、
事前にファイル名とシート名を規定できないのです。
なので、せめてペアにしたファイル同士が特定できれば、
ファイルとシートを選択する手間が省けると思ったのですが・・・
3つ以上開けなくなるけど、workbooksからマクロブックを除外した先頭2つを比較する方法で考えてみます。
ファイルのフォーマットが複数あるので、
事前にファイル名とシート名を規定できないのです。
なので、せめてペアにしたファイル同士が特定できれば、
ファイルとシートを選択する手間が省けると思ったのですが・・・
3つ以上開けなくなるけど、workbooksからマクロブックを除外した先頭2つを比較する方法で考えてみます。
899デフォルトの名無しさん (ワッチョイ 66fa-53ns)
2018/01/13(土) 19:36:48.93ID:6HVsHBKb0900デフォルトの名無しさん (ワッチョイ b5b3-6BZu)
2018/01/13(土) 23:03:28.12ID:aJN0Dby50 エクセル2010でCSVファイルを開いた場合、
UTF8やshiftjisを自動で判定して表示してくれますが、
この時に判定された文字コードを取得する方法はありますか。
用途は、外部データの取り込みでCSVを開きなおすための文字コードの特定です。
UTF8やshiftjisを自動で判定して表示してくれますが、
この時に判定された文字コードを取得する方法はありますか。
用途は、外部データの取り込みでCSVを開きなおすための文字コードの特定です。
901デフォルトの名無しさん (ワッチョイ 8903-YNmt)
2018/01/13(土) 23:14:29.83ID:odSwvUdp0 >>900
application.nkf
application.nkf
902デフォルトの名無しさん (ワッチョイ b5b3-6BZu)
2018/01/13(土) 23:28:32.80ID:aJN0Dby50903デフォルトの名無しさん (ワッチョイ e52b-Yq9l)
2018/01/14(日) 06:58:25.18ID:UVUQYwWb0 >>902
いいってことよ(´・ω・`)b
いいってことよ(´・ω・`)b
904デフォルトの名無しさん (ワッチョイ f1f7-GMp/)
2018/01/15(月) 01:08:16.65ID:Zqan8uZj0 >>897
実行時エラー13
型が一致しませんとなっていて
For~の行でエラーを出していて止まるみたいです
あと報告シートが選手の強さ別に複数に分かれているのですが今選手コードの入力したシート(つまりいま開いているマクロ実行用のボタンを押したシート)を処理したいという場合どうするとよいのか教えていただけると助かります
実行時エラー13
型が一致しませんとなっていて
For~の行でエラーを出していて止まるみたいです
あと報告シートが選手の強さ別に複数に分かれているのですが今選手コードの入力したシート(つまりいま開いているマクロ実行用のボタンを押したシート)を処理したいという場合どうするとよいのか教えていただけると助かります
905897 (アークセー Sxbd-IRwv)
2018/01/15(月) 01:48:08.96ID:ubg4QImpx >>904
エラーの出たコードを転載して見せてもらえませんか?こちらの環境ではうまく動いているんですが、私がコードを転載したときにミスをしたかもしれないので
それから、コードはボタンマクロ(ボタン名_Clickのような名前のプロシージャ)として各シートのシートモジュールに書いているんでしょうか?
エラーの出たコードを転載して見せてもらえませんか?こちらの環境ではうまく動いているんですが、私がコードを転載したときにミスをしたかもしれないので
それから、コードはボタンマクロ(ボタン名_Clickのような名前のプロシージャ)として各シートのシートモジュールに書いているんでしょうか?
906デフォルトの名無しさん (ワッチョイ f1f7-lXUw)
2018/01/15(月) 11:28:57.27ID:thpu0oBS0 >>905
Sub ReplaceCode()
Dim sh_list As Worksheet '選手名簿シート
Dim sh_report As Worksheet '報告用シート
Dim i As Long
Set sh_list = Worksheets("選手名簿")
Set sh_report = Worksheets("対戦結果表_A級")
For i = 2 To sh_list.Range("A2").End("xlDown").Row
sh_report.Cells.Replace What:=sh_list.Cells(i, 1).Value, Replacement:=sh_list.Cells(i, 2).Value, LookAt:=xlPart
Next i
End Sub
シート作成用のコードが既にあるのですがその中のコードを流用して各シートに実行用のボタンを置く計画でした
ActiveSheet.Buttons.Add(2, 1.5, 125, 18.75).Select
Selection.OnAction = "CSV_SAVE"
Selection.Characters.Text = Worksheets(2).Cells(1, 1).Text & "級のCSVファイル作成"
With Selection.Characters(Start:=1, Length:=15).Font
.Name = "MS Pゴシック"
.FontStyle = "標準"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
End With
これのCSV_SAVEをReplaceCodeにしてボタンの名前と場所をかえるつもりでしたがあまりよくない方法なのでしょうか
必要であれば既にあるコードを出しますので教えてください
Sub ReplaceCode()
Dim sh_list As Worksheet '選手名簿シート
Dim sh_report As Worksheet '報告用シート
Dim i As Long
Set sh_list = Worksheets("選手名簿")
Set sh_report = Worksheets("対戦結果表_A級")
For i = 2 To sh_list.Range("A2").End("xlDown").Row
sh_report.Cells.Replace What:=sh_list.Cells(i, 1).Value, Replacement:=sh_list.Cells(i, 2).Value, LookAt:=xlPart
Next i
End Sub
シート作成用のコードが既にあるのですがその中のコードを流用して各シートに実行用のボタンを置く計画でした
ActiveSheet.Buttons.Add(2, 1.5, 125, 18.75).Select
Selection.OnAction = "CSV_SAVE"
Selection.Characters.Text = Worksheets(2).Cells(1, 1).Text & "級のCSVファイル作成"
With Selection.Characters(Start:=1, Length:=15).Font
.Name = "MS Pゴシック"
.FontStyle = "標準"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
End With
これのCSV_SAVEをReplaceCodeにしてボタンの名前と場所をかえるつもりでしたがあまりよくない方法なのでしょうか
必要であれば既にあるコードを出しますので教えてください
907デフォルトの名無しさん (ワッチョイ 1188-/4a5)
2018/01/15(月) 11:58:16.00ID:Vljo7f2q0 >>903
application.nkf オブジェクトが見つかりませんでした。
下記のapplicationオブジェクト内にも、nkfプロパティが見つかりません。
https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-object-excel
オブジェクトの参照方法が違うのでしょうか。
application.nkf オブジェクトが見つかりませんでした。
下記のapplicationオブジェクト内にも、nkfプロパティが見つかりません。
https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-object-excel
オブジェクトの参照方法が違うのでしょうか。
908897 (アークセー Sxbd-IRwv)
2018/01/15(月) 23:02:33.00ID:JvjYqsKWx909デフォルトの名無しさん (スッップ Sd0a-YX4c)
2018/01/16(火) 12:17:16.43ID:SelV7zwId 質問です。
ソルバーで普通は目的セルをrangeなどで指定しますが、シートのセルにアクセスせず、vba内の変数を直接ソルバーにかけてvba内だけで完結したいのですが、方法あるでしょうか?
ソルバーで普通は目的セルをrangeなどで指定しますが、シートのセルにアクセスせず、vba内の変数を直接ソルバーにかけてvba内だけで完結したいのですが、方法あるでしょうか?
910デフォルトの名無しさん (ワッチョイ f1f7-GMp/)
2018/01/17(水) 02:18:24.01ID:x8yvrTsd0911デフォルトの名無しさん (ワッチョイ 239b-Q7o0)
2018/01/20(土) 12:24:27.92ID:sSjH/Vu40 セルのA列にある文字列をコンボboxにaddですべて入れた後に、一文字入力する度に候補が絞られてくって出来ます?
コード教えてもらえないですか?
コード教えてもらえないですか?
912デフォルトの名無しさん (オッペケ Srb1-WK0C)
2018/01/20(土) 12:31:05.83ID:TVDu7Qf0r 一文字入力する度にコンボボックスの候補を絞ればいいんとちゃうか?
知らんけど
知らんけど
913デフォルトの名無しさん (ワッチョイ c51a-3Ttg)
2018/01/20(土) 13:28:17.12ID:uuergXrf0 社内に部品表があって、重複している名前を省いて部品種類一覧の表を作ろうと思ってます。
・ネジM5
・ネジM5
・ナットM5
・ナットM5
↓
・ネジM5
・ナットM5
というイメージです。
自分なりに下記のマクロを組んでみました。
Dim row As Long, col As Long, D As Range
col = 1
row = 1
Do Until Cells(row, col) = ""
If Not Cells(row, col) = Cells(row + 1, col) Then
If D Is Nothing Then
Set D = Cells(row, col)
Else
Set D = Union(D, Cells(row, col))
End If
End If
row = row + 1
Loop
この後レンジDをコピペするマクロです。
部品の種類が100とか200なら動いてくれますが、本来20,000件超の部品の種類があり、こちらを処理するとフリーズします。
デバックのウィンドウはユニオンのところを指定してきてるんですが、ユニオンにはまとめられる量の限界などがあるのでしょうか?
・ネジM5
・ネジM5
・ナットM5
・ナットM5
↓
・ネジM5
・ナットM5
というイメージです。
自分なりに下記のマクロを組んでみました。
Dim row As Long, col As Long, D As Range
col = 1
row = 1
Do Until Cells(row, col) = ""
If Not Cells(row, col) = Cells(row + 1, col) Then
If D Is Nothing Then
Set D = Cells(row, col)
Else
Set D = Union(D, Cells(row, col))
End If
End If
row = row + 1
Loop
この後レンジDをコピペするマクロです。
部品の種類が100とか200なら動いてくれますが、本来20,000件超の部品の種類があり、こちらを処理するとフリーズします。
デバックのウィンドウはユニオンのところを指定してきてるんですが、ユニオンにはまとめられる量の限界などがあるのでしょうか?
914デフォルトの名無しさん (ワッチョイ 0bfa-weOF)
2018/01/20(土) 13:33:34.73ID:wJgnfOTG0 >>913
Accessでやれ。
Accessでやれ。
915デフォルトの名無しさん (ワッチョイ 23b3-3fO/)
2018/01/20(土) 13:41:46.63ID:CFAgCrzx0 >>913
ソートして重複を削除じゃダメなのか?
ソートして重複を削除じゃダメなのか?
916デフォルトの名無しさん (ワッチョイ ddc3-9sdm)
2018/01/20(土) 15:03:19.74ID:Fb/tMd6M0 >>913
Excel VBAでやってもいいけど、RANGEオブジェクトに溜め込むやり方よりは、素直に別シートに値をコピー、さらにそれを検索して別の値が出てきたら別シートにコピーでいいんじゃないのか?
そもそもExcelのフィルタ関連の機能でもできるからVBAを使う理由がわからない。
Excel VBAでやってもいいけど、RANGEオブジェクトに溜め込むやり方よりは、素直に別シートに値をコピー、さらにそれを検索して別の値が出てきたら別シートにコピーでいいんじゃないのか?
そもそもExcelのフィルタ関連の機能でもできるからVBAを使う理由がわからない。
917デフォルトの名無しさん (ササクッテロロ Spb1-TYcc)
2018/01/20(土) 15:06:48.01ID:iefRLv2cp >>913
dictionaryとかでだめかな?
dictionaryとかでだめかな?
918デフォルトの名無しさん (ワッチョイ db7f-Ye64)
2018/01/20(土) 17:40:00.19ID:91x3kJT10 DBMSがコンソールなんかに返した結果を
Excelセルに上手く貼り付ける方法ってある?
Excelセルに上手く貼り付ける方法ってある?
919デフォルトの名無しさん (ワッチョイ 0bfa-weOF)
2018/01/20(土) 19:41:33.47ID:wJgnfOTG0 >>918
詳細忘れたけど代入する事で、そのまま貼り付けられるメソッドがあったはず。
詳細忘れたけど代入する事で、そのまま貼り付けられるメソッドがあったはず。
920デフォルトの名無しさん (ワッチョイ 1d03-Qz07)
2018/01/20(土) 20:44:55.78ID:Y9eKqT4m0 多くは語らんけどある意味エスパーと言っておこうw
921デフォルトの名無しさん (ワッチョイ db9f-GP+B)
2018/01/21(日) 13:18:30.88ID:+2jqUeqC0 >>913
ADOなら一瞬で終わる
いろいろ突っ込まれているように、別の方法のが簡単だと思うけど
シート名やら列名は読みかえてね
Dim adocon As Object, adors As Object
Set adocon = CreateObject("ADODB.Connection")
Set adors = CreateObject("ADODB.Recordset")
With adocon
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0"
.Open ThisWorkbook.Path & "\" & ThisWorkbook.Name
End With
Set adors = adocon.Execute("SELECT DISTINCT 部品名 FROM [部品表$]")
Worksheets("部品種類一覧").Range("a1").CopyFromRecordset adors
adocon.Close
ADOなら一瞬で終わる
いろいろ突っ込まれているように、別の方法のが簡単だと思うけど
シート名やら列名は読みかえてね
Dim adocon As Object, adors As Object
Set adocon = CreateObject("ADODB.Connection")
Set adors = CreateObject("ADODB.Recordset")
With adocon
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0"
.Open ThisWorkbook.Path & "\" & ThisWorkbook.Name
End With
Set adors = adocon.Execute("SELECT DISTINCT 部品名 FROM [部品表$]")
Worksheets("部品種類一覧").Range("a1").CopyFromRecordset adors
adocon.Close
922デフォルトの名無しさん (ワッチョイ 239b-Q7o0)
2018/01/21(日) 15:03:53.81ID:pRI5Eg/X0 >>857
だれかこれわかる人いません?
だれかこれわかる人いません?
923デフォルトの名無しさん (ドコグロ MM99-vVh4)
2018/01/21(日) 16:45:39.61ID:WhYlNzfJM924デフォルトの名無しさん (アウアウイー Sa31-Y7DI)
2018/01/21(日) 18:35:28.14ID:7nwc0luUa 重複なしリストはいろいろやり方あるけど、標準機能使うかadoでやるかがスマートだろうね
dictionaryもありだけど、fsoのやつはなんか取り回しがいまいちじゃね
dictionaryもありだけど、fsoのやつはなんか取り回しがいまいちじゃね
925デフォルトの名無しさん (ワッチョイ 1d03-Qz07)
2018/01/21(日) 18:40:31.69ID:nVuQLEta0 ここ初心者スレかと思ってスレタイ見なおしてしまったわw
オレ以外初心者しかおらんやんw
オレ以外初心者しかおらんやんw
926デフォルトの名無しさん (ワッチョイ 0bfa-weOF)
2018/01/21(日) 18:41:57.84ID:EcNkRoqM0 メゾット君また寂しくなって来ちゃったのか
927デフォルトの名無しさん (アウアウイー Sa31-Y7DI)
2018/01/21(日) 18:57:02.81ID:7nwc0luUa .netframeworkのlistって重複削除機能なかったっけ?
928デフォルトの名無しさん (ワッチョイ db9f-GP+B)
2018/01/21(日) 20:07:47.89ID:+2jqUeqC0 >>927
リストにあるかないかはわかるみたい
これなら配列に突っ込んで総当たりしていくのと変わらなそう
読みやすくはなるけど
Dim partsList As Object
Set partsList = CreateObject("System.Collections.ArrayList")
Dim partsData
Set partsData = Range("データの列")
Dim parts
For Each parts In partsData
If Not partsList.Contains(parts.Value) Then
partsList.Add parts.Value
End If
Next
出力処理省略
リストにあるかないかはわかるみたい
これなら配列に突っ込んで総当たりしていくのと変わらなそう
読みやすくはなるけど
Dim partsList As Object
Set partsList = CreateObject("System.Collections.ArrayList")
Dim partsData
Set partsData = Range("データの列")
Dim parts
For Each parts In partsData
If Not partsList.Contains(parts.Value) Then
partsList.Add parts.Value
End If
Next
出力処理省略
929デフォルトの名無しさん (ワッチョイ 23b3-3fO/)
2018/01/21(日) 20:16:12.20ID:rQmHQ7OM0930デフォルトの名無しさん (ワッチョイ 8df7-f5OR)
2018/01/21(日) 21:00:25.33ID:xouI7cQH0931デフォルトの名無しさん (ワッチョイ 1d03-Qz07)
2018/01/21(日) 21:12:55.02ID:nVuQLEta0932デフォルトの名無しさん (ワッチョイ 0b80-H9dj)
2018/01/21(日) 21:38:18.50ID:Ycn/1JW20 require 'set'
File.readlines("ファイル名").to_set.map { |item| puts item }
Ruby の集合を使うと、以下のような行区切りのファイルを、
あ
い
あ
あ
う
い
以下のような結果にできる。
ただし、集合にはデフォルトで、順番は無いので、
順番が必要なら、お好みの基準でソートする
あ
い
う
File.readlines("ファイル名").to_set.map { |item| puts item }
Ruby の集合を使うと、以下のような行区切りのファイルを、
あ
い
あ
あ
う
い
以下のような結果にできる。
ただし、集合にはデフォルトで、順番は無いので、
順番が必要なら、お好みの基準でソートする
あ
い
う
933デフォルトの名無しさん (ワッチョイ 0bfa-weOF)
2018/01/21(日) 21:51:29.18ID:EcNkRoqM0 毎度思うんだが、Rubyって他言語のスレにまで布教しに来なきゃならないほど不人気なのか?
934デフォルトの名無しさん (ワッチョイ 0b80-H9dj)
2018/01/21(日) 22:19:18.53ID:Ycn/1JW20 Ruby だと、テキスト処理が、めちゃめちゃ簡単に作れる
他の言語のように、悪戦苦闘しない
他の言語のように、悪戦苦闘しない
935デフォルトの名無しさん (ワッチョイ db9f-GP+B)
2018/01/21(日) 22:23:07.58ID:+2jqUeqC0 どうせなら引っ越し準備も兼ねてPythonにしようゼ
936デフォルトの名無しさん (スプッッ Sd13-f5OR)
2018/01/21(日) 23:23:35.81ID:ppfN03med 単純に2万個のセルをUnionするだけで1時間かかる
Sub aaa()
Debug.Print Time
Dim u As Range
Set u = Cells(1, 1)
For r = 3 To 40000 Step 2
Set u = Union(u, Cells(r, 1))
Next
Debug.Print Time
End Sub
Sub aaa()
Debug.Print Time
Dim u As Range
Set u = Cells(1, 1)
For r = 3 To 40000 Step 2
Set u = Union(u, Cells(r, 1))
Next
Debug.Print Time
End Sub
937デフォルトの名無しさん (ワッチョイ 0b80-H9dj)
2018/01/21(日) 23:45:19.36ID:Ycn/1JW20938デフォルトの名無しさん (ワッチョイ 2323-16v+)
2018/01/22(月) 00:04:49.43ID:R+7srG110939デフォルトの名無しさん (ワッチョイ 0b80-H9dj)
2018/01/22(月) 01:20:01.78ID:pYe1Cwj70 そんなに時間が掛かるのなら、一旦データをエクスポートして、
データをテキスト処理してから、インポートして戻せば?
たかが、2万個のデータで、1時間は現実的ではない
そんなに時間が掛かっても、どうしても、VBA でやりたいのか?
データをテキスト処理してから、インポートして戻せば?
たかが、2万個のデータで、1時間は現実的ではない
そんなに時間が掛かっても、どうしても、VBA でやりたいのか?
940デフォルトの名無しさん (ワッチョイ 0bfa-weOF)
2018/01/22(月) 01:43:29.00ID:zmIcszTc0 あくまでUnionを使った場合であって高速に処理する方法はいくらでもあるからなぁ。
それに仕事でVBA使う環境だと他社との協調も考えなきゃいけないからRubyインストールする方がよっぽど非現実的だし。
まぁ、たぶんおちょくってるつもりなんだろうけど、そもそもVBA以外の環境がないって前提のスレだから、
Rubyマンの煽りが煽りになっていないっていう・・・。
それに仕事でVBA使う環境だと他社との協調も考えなきゃいけないからRubyインストールする方がよっぽど非現実的だし。
まぁ、たぶんおちょくってるつもりなんだろうけど、そもそもVBA以外の環境がないって前提のスレだから、
Rubyマンの煽りが煽りになっていないっていう・・・。
941デフォルトの名無しさん (ワッチョイ 8df7-f5OR)
2018/01/22(月) 04:08:31.22ID:Xp9Ai2fT0 重複の削除はワークシートでやった方がてっとり早いと思う
942デフォルトの名無しさん (ワッチョイ 3deb-Qbx4)
2018/01/22(月) 04:38:17.99ID:AE7SVx7N0 >>940
> そもそもVBA以外の環境がないって前提のスレだから
そんな前提で質問に来る人もいるだろうけど、
「最適解」を求めている人が、とりあえずVBAだとどうなるか、と思って質問する場合もあるでしょ
だから、質問者が「全体にVBA以外はダメ」って制限をかけていない限りは、
上でも、ACCESSを進めている人もいたけど、実用面から考えた回答も質問者の利益になると思うんだけど
(質問者がそう思っていても、何も知らないからそう思ってるってパターンすらあり得るかな)
> そもそもVBA以外の環境がないって前提のスレだから
そんな前提で質問に来る人もいるだろうけど、
「最適解」を求めている人が、とりあえずVBAだとどうなるか、と思って質問する場合もあるでしょ
だから、質問者が「全体にVBA以外はダメ」って制限をかけていない限りは、
上でも、ACCESSを進めている人もいたけど、実用面から考えた回答も質問者の利益になると思うんだけど
(質問者がそう思っていても、何も知らないからそう思ってるってパターンすらあり得るかな)
943デフォルトの名無しさん (ワッチョイ 0bfa-weOF)
2018/01/22(月) 05:56:27.49ID:zmIcszTc0 >>942
Excel VBA質問スレでの「実用面」は、一般的な企業向けWindows PC(Office製品入り)で出来る事に制限されると思うけど。
それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。
だいたい他の言語に興味があるなら、その言語のスレで質問すりゃいいわけだし、
どんな自己弁護をしたところで特定言語のスレで他言語の話をする理由にはならないよ。
せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、
Rubyスレに誘導して、そちらで話を展開すべきだね。
Excel VBA質問スレでの「実用面」は、一般的な企業向けWindows PC(Office製品入り)で出来る事に制限されると思うけど。
それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。
だいたい他の言語に興味があるなら、その言語のスレで質問すりゃいいわけだし、
どんな自己弁護をしたところで特定言語のスレで他言語の話をする理由にはならないよ。
せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、
Rubyスレに誘導して、そちらで話を展開すべきだね。
944デフォルトの名無しさん (ワッチョイ 3deb-Qbx4)
2018/01/22(月) 08:37:35.39ID:AE7SVx7N0 >>943
> それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。
リアルでも、相手に聞きもせずに勝手にそんな縛りをかけて要件定義する人はいないと思うよ
> せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、
> Rubyスレに誘導して、そちらで話を展開すべきだね。
環境を聞くのは勿論ありだが、「○○だとより簡単にできるよ」ってこちらから言う事に何の問題があるのか?
今ある環境内で必ず実現する必要があるなら別だが、そうでない場合もよくあることでしょ
ま、いずれにせよ、何も聞かないうちに勝手に「○○に違いない」って決めつけるのは、
要件定義では一番しちゃいけないことだよ
> それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。
リアルでも、相手に聞きもせずに勝手にそんな縛りをかけて要件定義する人はいないと思うよ
> せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、
> Rubyスレに誘導して、そちらで話を展開すべきだね。
環境を聞くのは勿論ありだが、「○○だとより簡単にできるよ」ってこちらから言う事に何の問題があるのか?
今ある環境内で必ず実現する必要があるなら別だが、そうでない場合もよくあることでしょ
ま、いずれにせよ、何も聞かないうちに勝手に「○○に違いない」って決めつけるのは、
要件定義では一番しちゃいけないことだよ
945デフォルトの名無しさん (ワッチョイ 0bfa-weOF)
2018/01/22(月) 10:06:54.55ID:zmIcszTc0 >>944
仕事している風を装いたいんだろうけど、明らかに経験が無いの丸出しなんだよな・・・。
そもそもVBAスレでRubyの話を出してくる事自体が問題なんだよ。
君が問題になっているのは要件定義の話ではなく開発環境の話だ。
明確な線引きをするなら、このスレではxlsmに記録し、特別な準備なしに実行できるものでなければ、何であれ許容範囲外だ。
仕事している風を装いたいんだろうけど、明らかに経験が無いの丸出しなんだよな・・・。
そもそもVBAスレでRubyの話を出してくる事自体が問題なんだよ。
君が問題になっているのは要件定義の話ではなく開発環境の話だ。
明確な線引きをするなら、このスレではxlsmに記録し、特別な準備なしに実行できるものでなければ、何であれ許容範囲外だ。
946デフォルトの名無しさん (オイコラミネオ MMeb-pCzv)
2018/01/22(月) 10:12:50.46ID:JFwvghX1M またそうやって明文化されてもいない自分ルールを展開していくー
947デフォルトの名無しさん (ワッチョイ 0bfa-weOF)
2018/01/22(月) 10:23:32.81ID:zmIcszTc0 明文化されてはいないけど、過去から今までのスレでの反応を見る限りは、
だいたいxlsmファイル単体でマクロの実行が補完できるかどうかが拒絶反応の出る出ないを分けてるよ。
ただ個別にマクロが記録された二つ以上のファイルを連携させる場合の話もあるから「xlsmに記録し、準備なしに実行可能な」と定義しただけ。
押しつけるつもりはないけど、この定義で問題が無ければテンプレに加えてキチ避けしてほしいくらい。
だいたいxlsmファイル単体でマクロの実行が補完できるかどうかが拒絶反応の出る出ないを分けてるよ。
ただ個別にマクロが記録された二つ以上のファイルを連携させる場合の話もあるから「xlsmに記録し、準備なしに実行可能な」と定義しただけ。
押しつけるつもりはないけど、この定義で問題が無ければテンプレに加えてキチ避けしてほしいくらい。
948デフォルトの名無しさん (アウアウイー Sa31-Y7DI)
2018/01/22(月) 11:30:49.09ID:r0T2WJT6a >>929
ごめんscriptingRuntimeのやつ、の間違いだ
ごめんscriptingRuntimeのやつ、の間違いだ
949デフォルトの名無しさん (スッップ Sd43-6QJI)
2018/01/22(月) 11:33:07.33ID:y0jssaARd VBAをメインとして他言語も補助的に使う。
それなりにあると思う
それなりにあると思う
950デフォルトの名無しさん (ワッチョイ 23b3-x16F)
2018/01/22(月) 15:12:56.07ID:EwN8a0pa0 同じ現象が起きるようにできるだけ簡単なコードを用意しました
まっさらなxlsmにUserForm1を挿入し、TextBox1とTextBox2を横に並べます
UserForm1モジュールに下記のようにコードを記述します
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 39 Then
With TextBox2
.SetFocus
.SelStart = 0
End With
End If
End Sub
UserForm1を呼んだ後、TextBox2にabと記入します
このとき、TextBox1からTextBox2に矢印キー右でうつろうとするとaの前ではなくaとbの間にカーソルが来てしまいます。
どうすればaの前にカーソルが来るようになりますか?もちろんabは例示にすぎずいろんな文字列が入ります
よろしくお願いします
まっさらなxlsmにUserForm1を挿入し、TextBox1とTextBox2を横に並べます
UserForm1モジュールに下記のようにコードを記述します
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 39 Then
With TextBox2
.SetFocus
.SelStart = 0
End With
End If
End Sub
UserForm1を呼んだ後、TextBox2にabと記入します
このとき、TextBox1からTextBox2に矢印キー右でうつろうとするとaの前ではなくaとbの間にカーソルが来てしまいます。
どうすればaの前にカーソルが来るようになりますか?もちろんabは例示にすぎずいろんな文字列が入ります
よろしくお願いします
951デフォルトの名無しさん (ワッチョイ 23b3-x16F)
2018/01/22(月) 15:25:33.05ID:EwN8a0pa0 >>950ですけど、KeyCode=40、つまり矢印キー下にセッティングして
TextBox1から2に移ると頭にカーソルきますね
ということは、入力した矢印キー右がTextBox2に移ったあとも生きててその影響が出てるってことですかね
まぁ原因分かっても解決方法が分からないのですが
TextBox1から2に移ると頭にカーソルきますね
ということは、入力した矢印キー右がTextBox2に移ったあとも生きててその影響が出てるってことですかね
まぁ原因分かっても解決方法が分からないのですが
952デフォルトの名無しさん (ワッチョイ 8d26-+VSC)
2018/01/22(月) 16:37:43.27ID:DgxtyBXU0 試していないけれど
With TextBox2 の前に
KeyCode = 0 を入れたらどう
With TextBox2 の前に
KeyCode = 0 を入れたらどう
953デフォルトの名無しさん (ドコグロ MM13-3fO/)
2018/01/22(月) 17:07:09.72ID:+/nnDvsjM954デフォルトの名無しさん (ワッチョイ 23b3-x16F)
2018/01/22(月) 22:49:33.42ID:EwN8a0pa0955デフォルトの名無しさん (ワッチョイ a302-GP+B)
2018/01/24(水) 10:46:16.37ID:QE61Ho6h0 。と。の間に入ってる文字を全部同じ文字に置換したい場合ってどうすればいいでしょうか?
。。 →。ccc。
。akok。 →。ccc。
。3293i9ia。 →。ccc。
みたいな感じです
。。 →。ccc。
。akok。 →。ccc。
。3293i9ia。 →。ccc。
みたいな感じです
956デフォルトの名無しさん (ワッチョイ a302-GP+B)
2018/01/24(水) 11:16:56.30ID:QE61Ho6h0 すいません数式の中の。と。の間の文字を置換でした
957デフォルトの名無しさん (ワッチョイ 25b3-Y7DI)
2018/01/24(水) 12:30:55.33ID:4OtF4psx0 数式の中のってのがよくわかんないから実際の数式を書いてくれ
958デフォルトの名無しさん (ワッチョイ a302-GP+B)
2018/01/24(水) 13:09:34.71ID:QE61Ho6h0 こういう事がやりたいって感じです
わかりづらくてすいません
=123456789(この9桁の数字はランダム) → =123ccc789
=123456789(この9桁の数字はランダム) → =12ccc3456789
わかりづらくてすいません
=123456789(この9桁の数字はランダム) → =123ccc789
=123456789(この9桁の数字はランダム) → =12ccc3456789
959デフォルトの名無しさん (スッップ Sd43-6QJI)
2018/01/24(水) 13:24:33.86ID:96uZKYcfd >>958
。の話はどこへいったんだ?
。の話はどこへいったんだ?
960デフォルトの名無しさん (ワッチョイ a302-GP+B)
2018/01/24(水) 13:52:49.81ID:QE61Ho6h0 いやこっちの方がわかりやすいかなとw
961デフォルトの名無しさん (ワッチョイ 5b7f-pQa0)
2018/01/24(水) 14:37:17.59ID:626EYBnb0 2週間くらい前から、
フォームコントロールのボタンを配置すると
エクセルファイルの起動が
いつもの起動時間の5倍くらいかかる様になり困っています。
ちなみに、新規のファイルでも同じ現象になり、
他のパソコンでも同じ現象になっています。
どなたか、解決方法を知らないでしょうか?
今使っている環境は
Windows 10、バージョン 1709
Excel2016 バージョン 1712
です。
フォームコントロールのボタンを配置すると
エクセルファイルの起動が
いつもの起動時間の5倍くらいかかる様になり困っています。
ちなみに、新規のファイルでも同じ現象になり、
他のパソコンでも同じ現象になっています。
どなたか、解決方法を知らないでしょうか?
今使っている環境は
Windows 10、バージョン 1709
Excel2016 バージョン 1712
です。
962デフォルトの名無しさん (オイコラミネオ MMeb-pCzv)
2018/01/24(水) 14:47:11.88ID:LHEOU22dM >>960
草生やしてんじゃねえよ真面目に質問しろ
草生やしてんじゃねえよ真面目に質問しろ
963デフォルトの名無しさん (ワッチョイ bdaf-nLVR)
2018/01/24(水) 16:00:42.34ID:eVK1iV6m0 w
964デフォルトの名無しさん (ワッチョイ a302-GP+B)
2018/01/24(水) 17:24:26.92ID:QE61Ho6h0 なんでwなんて打ったのか・・・反省してます
965デフォルトの名無しさん (ドコグロ MMa1-3fO/)
2018/01/24(水) 17:48:11.23ID:cTEKAhE2M966デフォルトの名無しさん (ワッチョイ 25b3-Y7DI)
2018/01/24(水) 19:49:39.94ID:4OtF4psx0レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 「アベノミクス」で投資対象と化したマンション ローンの低金利続き「年収の12倍」借りる20代出現 [蚤の市★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【高市悲報】神谷「部下が間違えて脱炭素を脱酸素て書いたんですよ😡それ読んだだけなのに挙げ足とるな!小学生か!」 [359965264]
- 【実況】博衣こよりのえちえち朝こよ🧪
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- インバウンドが崩壊したら日本はどうなるのか
- ほかほかご飯にかけるとうまいもの一覧
- FRUITS ZIPPERってアイドル流行ってるらしいが対抗してVIPもFRUITS VIPPERってアイドル結成しようぜ
