1 名前:1000 [2020/05/10(日) 13:43:45 ID:Nkoph0aj.net] ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part65 https://mevius.5ch.net/test/read.cgi/tech/1584430040/ ※デフォルト設定
634 名前:582 mailto:sage [2020/06/08(月) 07:46:04 ID:ACGXca97.net] >>609 でも、変数で受けちまうと何使っても?になっちまうよ。 それにFileSystemObjectのファイル列挙は糞遅かった筈。 特別な理由が無いならエラーで抜けちまって、特殊なファイル名には非対応とメッセージ出した方が良い気がする。
635 名前:582 mailto:sage [2020/06/08(月) 08:00:05.61 ID:ACGXca97.net] >>603 少し住所を扱う処理を動かせば直ぐに気付くレベルの話だよ。 特にスペースなんて人名や住所以外でもよくある話。 全角だろうが半角だろうが""に変換しちまうのはよくやるだろう。 まあ、全角半角は数字とかアルファベットでも問題になるからその前に
636 名前:StrConv使って統一するとかが普通の処理だろう。 ハイフンだって思いつくものはマイナスに変換する程度のことはする。 [] [ここ壊れてます]
637 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 08:12:22 ID:/JIEFRnW.net] むしろテキストボックスのEN_UPDATEでスペースやハイフンを消せば楽 郵便番号欄は数字以外受け付けないようにスタイル指定するだけでもいい
638 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 08:46:24.73 ID:k1oezjz2.net] フォルダを指定し、そのフォルダ内の全てのブックの、各ブックのシート"sire"の2行目から最終行をコピーして シートcompの最下行の一つ下に張り付けていき、I列に各ブック名を記入していくマクロを教えてください。 Sub comp() 'フォルダを選択 Dim path As String Dim r As Long Dim buf As String Dim i As Long Dim filename As String Dim mysheet As Worksheet Dim srcbook As Workbook Dim srcsheet As Worksheet With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then MsgBox "キャンセルされました。" Exit Sub End If path = .SelectedItems(1) End With Application.ScreenUpdating = False
639 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 08:47:00.39 ID:k1oezjz2.net] 続き Range("A1").Value = "担当者" Range("B1").Value = "行程1" Range("C1").Value = "件名1" Range("D1").Value = "行程2" Range("E1").Value = "件名2" Range("F1").Value = "行程3" Range("G1").Value = "件名3" Range("H1").Value = "期間" Range("I1").Value = "グループ名" Set mysheet = ThisWorkbook.Worksheets("comp") Debug.Print myseet buf = Dir(path & "\*.xls") 'フォルダ内の全ファイル名 Debug.Print buf Do While buf <> "" Set srcbook = Workbooks.Open(path & "\" & buf) Set srcsheet = srcbook.Worksheets("sire")
640 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 08:47:32 ID:k1oezjz2.net] 続き filename = 'srcsheetの拡張子なしのファイル名を取得 'シートの内容を2行目以降コピー srcsheet.Range(Cells(2, 8), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 8)).Copy 'myseetの最下行の一つ下に値として貼り付け mysheet.Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial xlPasteValues 'I列にそれぞれのファイル名を入力 For r = Cells(Rows.Count, 9).End(xlUp).Row + 1 To Cells(Rows.Count, 1).End(xlUp).Row Range("I" & r).Value = filename Next r srcbook.Close False buf = Dir() Loop Cells.EntireColumn.AutoFit Application.ScreenUpdating = True End Sub
641 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 10:43:42 ID:pUpXY1nL.net] ワークシートの指定について Activesheetだと動いて、worksheets(index)やworksheets("シート名")にするとプログラムが動かないことが多いのですが、何故でしょうか 下のようなプログラムを作りました。(Sheet2のA列の数字でSheet1にフィルターをかけて、pdf出力を繰り返す) Sub Macro3() For Each c In Worksheets("Sheet2").Range("A1:A68") i = c.Value a=1 Worksheets(1).Range("$B$4:$N$6492").AutoFilter Field:=1, Criteria1:=i Worksheets(1).PageSetup.RightHeader = " " & i r = Range("$B$5:$B$6492").Find(i).Row Worksheets(1).ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\Documents" & i & "." & Cells(r, 11).Value Next c End Sub これを実行しても、フィルターがかからず、pdf出力メソッドの部分でエラーが起きます。 しかし、Worksheets(1) を Activesheetに直して、Sheet1をアクティブにした状態で動かすと正常に動きます。 イミディエイトウィンドウでWorksheets(1)が正しく指定されているかも確認しましたが、されていました。 一体何が原因なのでしょうか。
642 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 11:07:13 ID:FM/y1B8a.net] >>616 入力ミスがないとして、この2箇所でシートの指定が抜けてるのが原因では Range("$B$5:$B$6492").Find(i).Row Cells(r, 11).Value 何度もWorksheets(1)を書くんじゃなくて、Forの外でActivateするかWithでSheet1を指定した方が間違いがなくていいと思う
643 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 11:07:50 ID:F0/ca02L.net] workbookは指定してるの?
644 名前:デフォルトの名無しさん [2020/06/08(月) 14:34:55.82 ID:k7tLKOMH.net] アドインに記述されてるプロシージャを、シート上の図形をボタンにしてそこから走らせたいのですが、 引数を渡そうとすると、このブックでマクロが使用できないかすべてのマクロが無効なっている可能性があります、と出て実行できません すべてのマクロを有効にしてもダメでした 引数なしの場合は、マクロが無効であっても、なんの問題もなく実行されます 登録は、'プロシージャ名 "引数"'とやっているのですが、マクロからそのままやると実行されますが、ボタンに登録すると実行されません なにが問題なんでしょうか?
645 名前:デフォルトの名無しさん [2020/06/08(月) 15:14:19 ID:vAWoQ1cV.net] sub 引数なし() 引数あり "引数" end sub
646 名前:デフォルトの名無しさん [2020/06/08(月) 15:39:02.50 ID:P+hhNSq/.net] なるほど・・・ 結構な数のボタンになるので面倒ですが、ひとまずそれでやってみます
647 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 15:41:22.39 ID:F0/ca02L.net] プルダウンなりなんなりで選ぶなりなんなりさせればいいじゃないなり
648 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 16:55:09.51 ID:Fo3kuWti.net] イベント付きボタンのクラス作ればいいんじゃないのかな
649 名前:611 mailto:sage [2020/06/08(月) 17:50:20 ID:k1oezjz2.net] srcsheet.Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 8)).Copy のところが違うみたいです。どう書けばいいですか?
650 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 18:10:47 ID:sSFxNrIu.net] シート名が抜けるの俺もむかーしよくやったわぁ アクティブにすると直るんだよなぁw 何度やったか記憶にないぐらいやって痛い思いした
651 名前:デフォルトの名無しさん [2020/06/08(月) 18:31:02.99 ID:J+Lc8xxu.net] withで囲んでもドットを忘れてそれに気づかずいつまでもソースとにらめっこしたりな
652 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 18:52:12.93 ID:d2CDqPLn.net] >>624 srcsheet.Range(srcsheet.Cells(2, 1), srcsheet.Cells(Cells(Rows.Count, 1).End(xlUp).Row, 8)).Copy 確証ないけど…
653 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 19:01:25.33 ID:zqZQO86x.net] Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Sh.Range("A:Z").Interior.Color = xlNone If Intersect(Sh.Range("A:Z"), Target) Is Nothing Then Exit Sub Else '赤く色が変わる
654 名前:列 Intersect(Selection.EntireRow, Sh.Range("G:Z")).Interior.Color = RGB(0, 255, 0) End If End Sub とにかく複数選択したセル行の特定の列を全部色付け 選択をやめると色が戻る(デフォルト)をやりたくて ThisWorkBookにこれを追記 で、なんとか希望の動きになったんですが これに1行目から7行目は除外(選択しても色が付かない) という条件の追加は可能ですか? 自分の知識じゃ無理ゲーですみません [] [ここ壊れてます]
655 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 19:48:40.38 ID:58QwRa4M.net] >>628 一番最初に、ifステートメント入れれば良い。 if target.row >=8 thenとか。
656 名前:611 mailto:sage [2020/06/08(月) 20:15:16.49 ID:k1oezjz2.net] >>624 ありがとうございますm(__)m
657 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 20:24:46.83 ID:zqZQO86x.net] >>629 おおお、ありがとう理想の挙動に近づきました! これだと12行目を選択した後にやめて 1行目を選択しても12行目の色が残っちゃうんだけどそれは回避不能ですか? If Intersect(Sh.Range("A:Z"), Target) Isのところを If Intersect(Sh.Range("A8:Z5000"), Target) Is とかに変えても少し挙動が近づいた気もしますが、
658 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 20:28:42.90 ID:pW+OOibM.net] 構造体のメンバ変数を頭からindexで指定するようなことってできませんか? for文で構造体のメンバ変数と配列とを順次比較したいんですが。
659 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 20:28:54.07 ID:WKHI6Xr1.net] 変数名やプロシージャ名を日本語で書くか否か迷ってます 日本語命名で困ったことが起こった人はいますか
660 名前:デフォルトの名無しさん [2020/06/08(月) 20:30:33.47 ID:ckk4P3me.net] >>631 少しは頭を使えよ、馬鹿
661 名前:デフォルトの名無しさん [2020/06/09(火) 00:06:52.26 ID:GDblTDVr.net] >>634 頭使ったらハゲるだろ、このハゲ
662 名前:デフォルトの名無しさん [2020/06/09(火) 00:40:35.48 ID:4DWGZxBT.net] ちょっとトンチンカンかもしれないですが WindowsのエクセルのVBAって LinuxのOpen OfficeのCalcでも使えたりするんでしょうか?
663 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 01:33:20.60 ID:dgDUMn0q.net] >>633 あるぞ 英語環境しかないPCだと使えなくなる 人に送ったら面倒になった
664 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 03:31:53.35 ID:eSuxcQl/.net] >>633 うちが英語とスペイン語環境しかなくて送られてきたVBAが動かなくて困った事が何度もある 日本人だからって日本語環境でやってるわけではない
665 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 03:41:28 ID:eSuxcQl/.net] >>636 ExcelVBAはWinとMacでも違いがある Win/Mac/Linuxで使えるOOoやLOのCalcで使えるVBAは制限やできない事があるけど一応使える
666 名前:582 mailto:sage [2020/06/09(火) 08:27:55.73 ID:w8zDheKG.net] >>633 日本人にとってもコードが読みにくくてかなわん。
667 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 09:00:21.92 ID:khiSZY25.net] >>633 会社で使うなら社内の自分より詳しい人に相談してみ
668 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 09:06:51.24 ID:r/wULa9J.net] 個人的には日本語プロシジャー名好き 処理名だと分かりやすい
669 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 09:38:40.07 ID:rQkYVq9m.net] 困った時のローマ字 Sub CSV_no_deTa_wo_rodo_suru()
670 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 09:49:38.68 ID:r/wULa9J.net] そもそもシート名で日本語使ってるからね 気にするならそこからやらないとね
671 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 09:56:55.81 ID:LXNCuYlO.net] >>633 単純に一つの言語で統一した方が読みやすい これは一般的な文章でも感じられると思う 逆にコメント等を日本語にすることで注釈として意識させることが出来る 自分は実装には使わないテスト用のメソッドをを日本語名にする事はあるよ アメリカに送ったら云々は条件が特殊だし、 日本語コメントも文字化けするんだから関係ないだろと思う
672 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 10:05:30 ID:FZrbGc0Z.net] システムとして表示やコンパイルが可能かってのと、それを読む人間が外国語を理解できるかはまた別の話 とりまファイル名やワークシートに入ってるデータが日本語なら何も気にしなくていいってことよ そもそも半角文字だって国によって割り当てが違うんだし
673 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 10:25:08.00 ID:LXNCuYlO.net] いずれにしても海外環境で動くかって話になると、 関数名ひとつの話じゃないってことだな
674 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 11:06:11 ID:GhLF46O3.net] >>642 自分はプロシージャ名だけでなく変数名にもときどき使ってます。 変数名を横文字で考え付くのが面倒ってこともありますが。 行や列の位置を示す変数に tate yoko の後は 行 列 縦 横 など。
675 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 12:07:12.66 ID:GJCBYo9K.net] 賛否両論(少し否優勢)な感じね 賛の中でもプロシージャ名、関数名、定数変数名のどこまで日本語が許されるかも派閥次第か
676 名前:582 mailto:sage [2020/06/09(火) 12:11:23 ID:w8zDheKG.net] iとかなら良いけど変数の型とかプロシージャなのか区別出来る名前になってないと最悪。 で、日本語の名前つけてるのにそんなのが多い。
677 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 12:33:34.60 ID:RJ9Fxau+.net] >>639 ありがとうございます
678 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 12:34:58.09 ID:LXNCuYlO.net] 変な事せずに命名規則に従った方がいいと思うけどね メシマズ嫁と同じ思考回路だぞ
679 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 14:16:42.79 ID:VHdLMKHt.net] すみません。どなたか詳しい方、ご指導願います。 データ計算をVBA作成しようとして悩んでいます。 リストボックスにある地名を選択して、テキストボックス1に数字を 入力したらテキストボックス2に対応した数値を出したいのですが 上手く書けません。 データシートのA列(A2からA300)には地名、横軸(B1からBG1)には整数値(50ずつの数値)があり 地名と整数値の交点には、それぞれ対応した金額が入っています。 またリストボックスの地名は「地名」として別シートを作成しています。 説明方法が悪くて申し訳ないのですが記述の方法の 解説を宜しくお願いします。
680 名前:デフォルトの名無しさん [2020/06/09(火) 14:31:54.35 ID:ksQUvwBH.net] h,vlookupじゃダメなんですか?
681 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 14:36:44.80 ID:LXNCuYlO.net] どこまで書けてて、どこから分からないの?
682 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 14:38:50.34 ID:XR5JAco5.net] XY座標のセル表示して終わりじゃないなら ピボット勉強した方が良いと思う
683 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 14:49:37.66 ID:VHdLMKHt.net] 651です。 Private Sub ListBox1_Change() ListBox3.Clear Select Case ListBox1.Text Case "東京都" ListBox3.List = Worksheets("データ").Range("A2:A8").Value (略) End Select With ListBox3 .ColumnHeads = False .ColumnCount = 1 .ColumnWidths = "40;50;50" .Font.Name = "Meiryo UI" .Font.Size = 11 End With End Sub Private Sub TextBox2_AfterUpdate() Dim TextBox2 As Range Dim TextBox3 As Range Set TextBox2 = Worksheets("データ").Range("A2:A13") Set TextBox3 = TextBox2.Find(What:=TextBox2.Value, LookAt:=xlPart) If Not TextBox3 Is Nothing Then 'ヒットした値をテキストボックスにセット TextRegion.Value = Worksheets("データ").Cells(TextBox3.Row, TextBox3.Column + 8).Value End If End Sub なんか変です。。。
684 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 14:54:09.61 ID:VHdLMKHt.net] 651です。 たぶんツッコミどころ満載です。 交点のセレクトできていません。
685 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 15:51:31.81 ID:Hq8JX0Tk.net] なぜ段階を踏んで自分でテストモデルを組んでみないのかが疑問だわ 初心者の頃も含めてその程度の内容で誰かに聞いたことすらないわ
686 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 15:53:54.04 ID:Hq8JX0Tk.net] 1.リストボックスで選択してボタン押して他のフォームで項目表示できるか 2.テキストボックスに書き込んでボタン押して他のフォームのテキストボックスに表示できるか 3.リストボックスとテキストボックスで選択と書込をして同じフォーム上のテキストボックスに対応した数字を出せるのか とかとか
687 名前:デフォルトの名無しさん [2020/06/09(火) 16:19:22.27 ID:ksQUvwBH.net] マクロの記録使うのはいいけど その結果の意味ぐらい調べようよ ググらなくてもF1キー押せば表示されるからさ
688 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 16:24:07 ID:LXNCuYlO.net] >>657 下の関数内で使ってる変数名を具体的に書いてみたらどうかな TextRangeForSearchTargetみたいな文章風でもいいから
689 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:05:07.59 ID:/5vAUGTr.net] ユーザーフォームに https://www.s-projects.net/degree-position.html のサイトにあるような 位置度の算出を丸々搭載したいけど 素人にゃ厳しいですかね?
690 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:28:45 ID:FZrbGc0Z.net] >>663 簡単
691 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:40:53.94 ID:Hq8JX0Tk.net] ユーザーフォーム使ってTextBox1とTextBox2に数字いれてTextBox3に足し算の結果だすような基本をまず調べればあとは適当にぐぐりゃ分かるわな 計算途中も変数いちいち宣言して代入していくといいわ 自分で何やってんのか見失わないようにするため Sub testttt() Dim drawingX As Double: drawingX = 2 Dim drawingY As Double: drawingY = 2 Dim realX As Double: realX = 2.1 Dim realY As Double: realY = 2.1 Dim diffX As Double: diffX = realX - drawingX Dim diffY As Double: diffY = realY - drawingY Dim ResultPosition As Double: ResultPosition = Sqr(diffX * diffX + diffY * diffY) * 2 MsgBox ResultPosition End Sub
692 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:54:43.46 ID:AbQV9kr1.net] Private Sub TextBox1_Change() 'Xの図面寸法 TextBox3 = Val(TextBox1.Value) - Val(TextBox2.Value) End Sub Private Sub TextBox2_Change() 'Xの測定値 TextBox3 = Val(TextBox1.Value) - Val(TextBox2.Value) End Sub Private Sub TextBox3_AfterUpdate()'Xのズレ TextBox3 = Val(TextBox1.Value) - Val(TextBox2.Value) End Sub Private Sub TextBox4_Change()'Yの図面寸法 TextBox6 = Val(TextBox4.Value) - Val(TextBox5.Value) End Sub Private Sub TextBox5_Change() 'Yの測定値 TextBox6 = Val(TextBox4.Value) - Val(TextBox5.Value) End Sub Private Sub TextBox6_Change() 'Yのズレ TextBox6 = Val(TextBox4.Value) - Val(TextBox5.Value) End Sub Private Sub TextBox7_Change() '位置度最難関 TextBox7 = Val(Sqr(TextBox3.Value) ^ 2) + Val(Sqr(TextBox6.Value) ^ 2) * 2 End Sub tBox6.Value) ^ 2) * 2 End Sub 1〜6まではぐぐったらなんとかできた あとは7… >>665 ぐぐるより難しそうで無理す
693 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:58:28.74 ID:AbQV9kr1.net] ああ、最後に変なコピペが混じってる 3と6にも多分式を入れないとだめですよね恐らく
694 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 18:02:48.17 ID:AbQV9kr1.net] いや違う、むしろ7に入れずに3と6っぽい? そもそもド素人にはやはり厳しいね 頑張りますわ
695 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 18:44:30.51 ID:AbQV9kr1.net] うおぉ、浮動小数点かこりゃ? どっかでroundで四捨五入せんといかんのね 1人であたふたすまん ほんとムズい
696 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 19:24:04.57 ID:Hq8JX0Tk.net] Changeイベントなんか使うから難しくなるわけで・・・・ そのサイトにあるように、ボタン押して計算するようなもの作りたいんだろ? ならズレ角度抜きで、テキストボックス7個作って ボタン押すと上の4個から数値拾ってきて下の3個に計算結果を入れるっていうな イベント系はCommandButton1_Click()だけでいいはずだぞ
697 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 19:44:15.62 ID:Hq8JX0Tk.net] Private Sub CommandButton1_Click() Dim drawingX As Double: drawingX = TextBox1.Value Dim drawingY As Double: drawingY = TextBox2.Value Dim realX As Double: realX = TextBox3.Value Dim realY As Double: realY = TextBox4.Value Dim diffX As Double: diffX = realX - drawingX Dim diffY As Double: diffY = realY - drawingY Dim ResultPosition As Double: ResultPosition = Sqr(diffX * diffX + diffY * diffY) * 2 TextBox5 = ResultPosition End Sub https://i.imgur.com/yhMCwtL.jpg 位置度だけだけど。 テキストボックスはIMEModeOffにしておく
698 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 19:49:22 ID:0Bu4FXEm.net] なんでユーザーフォームってクソダサなんだろな 色変えられるんだしMicrosoftももうちょい気遣ってくれてもいいのにな
699 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 20:04:52.19 ID:PO2SY+XL.net] >>671 天才ですか、、 何も知らん癖に自動にしたいかなぁと 思って検索してパクりまくって作ってましたわ ズレ量も欲しいからとせっせと 小数点も3桁以上は四捨五入したく 1〜4までは意味も分からずとりあえず ちゃんと挙動してるかなぁレベル アドバイス貰う以前の素人レベルだからスクショですんません 原理すらわかってない https://i.imgur.com/0iPDqgX.jpg https://i.imgur.com/ksEqFVN.jpg
700 名前:582 mailto:sage [2020/06/09(火) 20:10:52.53 ID:w8zDheKG.net] >>666 そういう書き方せずに>>665 を具体的な値の部分は削除してまず関数化する。 Function GetResultPosition(drawingX As Double, drawingY As Double, realX As Double, realY As Double) As Double Dim diffX As Double: diffX = realX - drawingX Dim diffY As Double: diffY = realY - drawingY Dim ResultPosition As Double: ResultPosition = Sqr(diffX * diffX + diffY * diffY) * 2 GetResultPosition = ResultPosition End Function 初心者を脱っしていれば、点はユーザー定義にしてると思うけど、まあこんな感じ。
701 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 20:19:17 ID:OFRsK1Sh.net] いつまで素人素人言い訳してくれくれする気だ
702 名前:582 mailto:sage [2020/06/09(火) 20:19:48 ID:w8zDheKG.net] 次にTextBoxの値を関数い代入する。 なお、TextBoxの名前もそれっぽく変えておく。 Sub test() Dim drawingX As Double Dim drawingY As Double Dim realX As Double Dim realY As Double drawingX=txtDrawingX.Value drawingY=txtDrawingY.Value realX=txtRealX.Value realY=txtRealY.Value txtResult.Value=GetResultPosition(drawingX, drawingY, realX, realY) End Sub
703 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 20:28:43.03 ID:PO2SY+XL.net] ごめんスクショの所も直しきれてなかったし初心者を脱してないレベルだから 調子乗って挑戦しようと思ったのが間違い 測定値はどこまで小数点書こうが3桁で四捨五入 ズレ量も四捨五入された3桁で表示 四捨五入された3桁のズレ量同士で計算されて 位置度も3桁で四捨五入されてフィニッシュ やろうとした事が多すぎました 普段のエクセルのSQRT関数入れたツールか 関数電卓で断念します クレクレとかじゃなく、助言みんなありがとうです
704 名前:582 mailto:sage [2020/06/09(火) 20:51:16.65 ID:w8zDheKG.net] >>677 四捨五入なんて最後で良いじゃん。 ResultPositionを四捨五入して返すだけだと思うが。 入力の見た目も四捨五入したいならそれぞれでやりゃ良いし。 どっちにしろ、四捨五入なんて考えずに作って、出来てから考えた方が良いぞ。
705 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 21:14:50.07 ID:PO2SY+XL.net] >>678 どうも…事情がありまして ズレ量と位置度を両方記入する必要があるから計算を合わせたいのです そうしないと記入したズレ量と数値の計算が違ってくるので なので普段はExcel関数ツール作ってで計算させてます (名称はセル番地) まず小数点7桁ぐらいで出力されてきやがるズレ量をRound関数で全て小数点3桁にする ↓ 小数点3桁同士で位置度の計算をさせる =if(位置度="","",SQRT(SUMSQ(X実測値-X図面寸法,Y実測値-Y図面寸法))*2) ↓ 最後に出た位置度も小数点3桁にする =if(位置度="","",Round(位置度,3) ↓ 位置度とズレ量を小数点3桁まで記入 現状これが自分の最善だったので…
706 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 21:21:13.62 ID:PO2SY+XL.net] 間違えた 小数点3桁同士で位置度の計算をさせる =if(Xの実測値="","",SQRT(SUMSQ(X実測値-X図面寸法,Y実測値-Y図面寸法))*2) 2つ目はこうやった
707 名前:582 mailto:sage [2020/06/09(火) 21:24:41.76 ID:kJxmgxZ3.net] >>679 いやいや、そういう話じゃなくてね、そんなもんは最後に入れれば良いでしょ。 先ずは四捨五入無しで動くところから。 あとTextBoxとかイベントとかも後でいいんだよ。
708 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 21:29:48.33 ID:PO2SY+XL.net] >>681 ごめん、ほんと初心者以前知識すらない関数だけで凌いできたレベルでちょいネットで調べりゃ出きるかなと思ったらもう手つけられんのですわ クレクレ以前の問題で それでも >>671 のは頂こうと思うとります
709 名前:デフォルトの名無しさん [2020/06/09(火) 21:37:07.98 ID:/5vAUGTr.net] そういう業務と無縁だからエクセル関数で計算とかほとんど知らん俺からすると そんな数式ほんとかよと思ったら ほんとだった それはそれでよく考えたもんだなおい 測定をする?部署は凄いね
710 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 21:38:09.42 ID:khiSZY25.net] >>682 悪いことは言わんから早いうちに転職しなされ こういう仕事向いてないよ
711 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 21:41:34.61 ID:hYyeR2h+.net] プログラミングの基本も知らないレベルの人がコピペでツール作って業務に使用するって大丈夫なのか?
712 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 21:45:05.79 ID:FZrbGc0Z.net] 少数以下の計算結果を同じにするのは、Excelでは一番難しい分野の一つ たとえば銀行の利息とか、素人が作った数式だとまず合わない
713 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 21:56:09.99 ID:khiSZY25.net] この先も苦労するだろうし、もし重大な問題が起きた場合周りが迷惑するんだよな
714 名前:デフォルトの名無しさん [2020/06/09(火) 21:59:00.39 ID:I+ooWyO2.net] 馬鹿に教えても何かあるとまた頼るだけ 馬鹿に教えてもろくなことにならんぞ その場で形だけ低姿勢にしてるだけで本音は違うからな
715 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 22:01:59.19 ID:0Bu4FXEm.net] より正確な計算するのってcurrency型だっけ? double使うより
716 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 22:10:25 ID:OFRsK1Sh.net] 向き不向き以前に学習する気が無い
717 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 22:26:28.10 ID:1rtAHViu.net] 少数の計算はどの言語でやってもやっかい なので普通は名の知れたライブラリを呼ぶ 自分で書くのは最後の手段
718 名前:デフォルトの名無しさん [2020/06/09(火) 22:27:34.95 ID:I+ooWyO2.net] >>689 違いがわからない馬鹿はコメントしなければ良いのに
719 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 23:36:40.87 ID:KturEXme.net] スレチかもしれないけど他の方法も・・ >>653 VBA使わずにフォームコントロールのリスト選ぶだけで表示 https://i.imgur.com/SHqygJ1.png >>663 HTAのVBSciptで https://i.imgur.com/rvwycaA.png
720 名前:デフォルトの名無しさん [2020/06/10(水) 01:20:22 ID:aAKpfJRW.net] 学べない俺には刺さるわ、言い訳だが… これだけは!っていう心臓部になるコードだけはネットで見つけて何とか繋げて作る どこ弄ればどう変わるかだけ後で見ても絶対わかるようにコードより丁寧なコメントを残す それさえ完成するともう安心して終わり あとは簡単な挙動はテンプレがネットにあるからひろってくる ユーザーフォームのボタンはで黄緑、黄色、水色を多用する プロシージャ当てはめるだけで職場じゃパソコンの先生扱い android端末やiPhoneの扱いならなぁ 近所でおばちゃまたちのスマホ教室を副業でやってるくらい詳しいのにっくそっ!
721 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 05:20:40.78 ID:9S1ZPIsx.net] 趣味や勉強中ならわかるが仕事頼んだら理解してないネットのコピペもって来るような人にはもう頼めんだろ
722 名前:582 mailto:sage [2020/06/10(水) 06:37:22 ID:h6488s/K.net] >>682 そういう言い訳は良いから。 いつも思うことだが初心者はわざわざ問題を難しくする。 先ずは>>671の最後の TextBox5 = ResultPosition を TextBox5 = Round(ResultPosition,3) にするだけだ。 それに、TextBox1~4の3桁をど一にかしたいなら>>676を利用した方が簡単。 それぞれのchangeイベントで自分を3桁にした後で>>676のtest呼び出すだけ。
723 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 08:27:35.36 ID:ZDdhDfGU.net] あいつは禿げたおっさんで体臭臭そうだけど、俺からみるとなかなか頑張ってると思うぜ 簡単な書籍買って一冊読んである程度まとまった知識得るといいわ 一年後にはここでふんぞりかえってレスしてると思うね
724 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 16:06:12.58 ID:alb8qwRt.net] 買った本開いたの最初だけで、今は枕になってるぞ
725 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 16:45:17.85 ID:zxOaMDTC.net] >>698 メルカリへ
726 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 17:48:53.56 ID:GhRRuhdi.net] >>698 くれ
727 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 20:30:18 ID:O8L9L3qt.net] >>696 本当にありがとう。。言い訳やめて素直に全部頂いたら完成しました… 正直コードは何も理解しとらんですが… https://i.imgur.com/guqSVVU.jpg
728 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 20:43:31 ID:O8L9L3qt.net] なるほど、普段XとYの図面値が両方0な事も結構多い そういうときはTextboxの1と3(XとYの図面値)のValueを0に設定しとけばいいのか こういう事を本で基礎から学ばずスマホで調べて小ずるく終わらせるのが自分の学習性の無さ 、本当に駄目ですわ… 教えてくれた人への感謝と自分への落胆が酷い もう生産部署に飛ばしてくれよ
729 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 21:27:00 ID:r05FbU6w.net] フォームボタンを置いてそのシートで矢印押し続けるとセル移動が飛び飛びになるんだけど対処法ありますか? とりあえずマクロ登録した図形にしたら発生しなくなったけど押した感ないから気持ち悪い
730 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 21:32:19 ID:2cEQGA3C.net] >>701 理解する気が無いからな
731 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 21:34:24 ID:2cEQGA3C.net] >>703 本当に飛び飛びになってるかカーソル位置をdebug.printとかで確認してみろ
732 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 22:01:15.35 ID:zJ0W6AlK.net] >>704 そう、それがあかんわ ちょいちょいと細かなとこばっか弄るくらいしかできない とりあえず位置度の数値をアクティブセルに反映されるボタンを追加して完成です 失礼しました本当に
733 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 23:43:02.56 ID:r05FbU6w.net] >>705 もちろん実際に移動が飛ぶわけではありません 表示上の問題です
734 名前:デフォルトの名無しさん [2020/06/11(木) 02:06:11.07 ID:l/gRHUK3.net] 馬鹿はこうやって厚かましく聞きだそうとする