Excel VBAコードを使ってマンホールの調査書を作成する手順と図の更新方法を教えてください

このQ&Aのポイント
  • 高齢者活用センターの紹介でExcelでマンホールの調査書を作成することになりました。マンホールには電気線と通信線の穴がありますが、それぞれの穴の数と径、使用状況を調査します。データを入力した後、作図シートに対応する図を配置し、数字を書き込みます。そして、更新ボタンを押すことでデータに応じて図を変更します。作図シートにはマンホールの左右側面と前後側面の4カ所に図を描きます。
  • 作図要領には、管なしの穴は破線の○、未入線の穴は実線の○に数字1、入線有の穴は実線の●に数字2を配置します。また、○と●の直径は管径情報に基づいて0.3mmから0.5mmに変更します。穴の数は24~50程度あります。
  • VBAコードを使用して図を更新する要領を教えてください。例えば、破線の○を検索して更新するコードは、Worksheets(3)などではなくシート名で指定する方法がわかりません。また、XXXXの箇所も検討が付きません。
回答を見る
  • ベストアンサー

ExcelのVBAコードをズバリで・・・。

高齢者活用センターの紹介でExcelで作画をすることになりました。 案件は、国土交通省に提出するマンホールの調査書の作成。 1、マンホールに電気線の穴が幾つあるのか? 2、マンホールに通信線の穴が幾つあるのか? 3、それぞれの穴の径は幾つか? 4、それぞれの穴の使用状況はどのようであるのか? 調査データ _N_状_況_管径 _0_管なし__A=100 _1_未入線__B=110 _2_入線有__C=120 作図要領 管なし・・・破線の○(中に数字なし)/○の直径=0.3mm 未入線・・・実線の○(中に数字の1)/○の直径=0.4mm 入線有・・・実線の●(中に数字の2)/○の直径=0.5mm 穴の数は24~50程。 マンホールの穴の配置に似せて○を配置。 更に、未入線と入線有の場合は○中に数字を書き込む。 加えて、管径情報に基づいて○や●の直径を変更。 これをマンホールの左右側面、前後側面と4カ所描きます。 ******************  20分で一枚描くために考えた手順 ****************** 1、データ入力シートに調査データを入力。 2、それぞれの作図シートに対応する○を破線で配置し数字を書き込む。 3、更新ボタンで入力データに応じて○を仕上げる。 4、同時に作図シートに調査データを転記する。 今、大体、80分で一文書を仕上げています。 それでは、とても期限内には無理。 そこで、上述のような手順を考えました。 が、私はExcel操作は今日で3日という全くの門外漢。 で、さっぱり、どうやってアイデアを実行に移したらよいのか判りません。 そういうことで質問する次第です。 <質問:作図シートに配置した図(円)を更新する要領> Set myDocument = Worksheets(X) For Each sh In myDocument.XXXX   If sh.Type = XXXXX Then     If sh.XXX.XXX.XXX = 1 And sh.XXX.XXX.XXX = XXXX Then       sh.XXX.XXX.XXX = XXX     End If   End If Next 例えば、破線の○を検索して更新するコードは、このようだろうと推測しています。 が、Worksheets(3)などではなくシート名で指定する要領が判りません。 また、XXXXの箇所が全く検討が付きません。 明日中には、この半自動化を達成したいと思っています。 宜しくお願いします。 なお、ExcelのVBAは初めてです

noname#140971
noname#140971

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.6

Shape.TextFrameオブジェクトのOrientationプロパティで設定します。 右向きが sp.TextFrame.Orientation = msoTextOrientationDownward 左向きは sp.TextFrame.Orientation = msoTextOrientationUpward msoTextOrientationDownward,msoTextOrientationUpwardは定数で msoTextOrientationDownwardは 3 msoTextOrientationUpwardは 2 です。 Orientationプロパティの値はLong型ですからtxtMukiはLongで宣言してください。 >マニュアルの読むべき箇所 Excelのバージョンが2007以外だったら「マクロ記録」とヘルプが参考になる、 と書きたいところですが、バージョンによって誤りがあります。 VBEで[ローカルウィンドウ]を使って変数spの中身を展開してプロパティを確認したり、 [オブジェクトブラウザ]で定数を確認したりすると良いです。 #AccessVBAは経験者でいらっしゃいましたよね? #なので[ローカルウィンドウ]、[オブジェクトブラウザ]等、 #基本的な説明は省いてますけど大丈夫ですよね。

noname#140971
質問者

お礼

テストしましたら該当の図のみをそれぞれにキャッチできました。 もはや、完成したも同然です。 これで、明日からの作業は半分の時間となります。 ありがとうございました。

その他の回答 (5)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

>PS: しかし、未だ1行も書けずです・・・。 質問が来ないからいいのではなくて、 自分の担当作業にある程度責任を持ってやりましょうよ、ということ。 趣味のレベルならともかく仕事で使うなら あなた自身も確認が必要です。 回答者がどれだけ確認したかどうかあてにできない時もあります。 100%を求められるのでは?。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

>国土交通省に提出するマンホールの調査書 今更ですが、 結果は正確さを求められるのでは?。 頼むとしても、実績のある業者に頼めなかったのでしょうか?。 仕様取り間違え、仕様漏れ、とかすでに起こりそうな気配です。 ここでの結果をどうやって正しいと検証するのか、気になります。 提出先から、「どうしてこの値がxxなのか?」みたいな質問は来ないのですか?。 そのとき「ネットでプログラム作ってもらったからわかりません・・・」と いうのは言い訳にならないと思います。

noname#140971
質問者

お礼

>提出先から、「どうしてこの値がxxなのか?」みたいな質問は来ないのですか?。 来ないと思います。 データ入力の際に、管径とかは横のセルに換算して表示するようにしています。 また、作画する円の大きさ情報も更にその横のセルに表示。 =IFERROR(VALUE(CutStr("/220/150/100/160/100/50/75/80/30", "/",FIND(F14, "XABCDGHIJK", 1))),"") Aが管の呼び名で、その径が220ということです。 同じ要領で、作画する円の径も求めます。 これ位の式ですと社員の方も理解できるし必要に応じて修正できるかと思います。 こうして、プログラム中にマジックナンバーを埋め込むことはしません。 ですから、動作する限りではミスはないでしょう。 PS: しかし、未だ1行も書けずです・・・。 何が判らないから書けないのかが判らない現状。 トホホのトホホです。 補足質問するやもしれませんので宜しく!

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

失礼。『更新』の意図をちょっと取り違えていました。 既に破線の○があって、"1"や"2"などTextが書いてあり、 それに応じてサイズ変更などの処理をするという事ですね。 Sub try2()   Const B As Single = 25 '管径(仮)   Const C As Single = 30   Dim sp As Shape 'Loop用   Dim tx As String 'テキスト取得用   For Each sp In ActiveSheet.Shapes     With sp       If .AutoShapeType = msoShapeOval Then         tx = ""         'バージョンによってエラーが出る対策として         '一旦Text取得してみる         On Error Resume Next         tx = .TextFrame.Characters.Text         On Error GoTo 0         Select Case tx         Case "1"           .Line.DashStyle = msoLineSolid           .Width = B           .Height = B         Case "2"           .Line.DashStyle = msoLineSolid           .Fill.ForeColor.SchemeColor = vbBlack           .TextFrame.Characters.Font.Color = vbWhite           .Width = C           .Height = C         End Select       End If     End With   Next End Sub ただ、マクロを使わないでも 最初に3種類のShapeを原型として作っておけば 後は[Ctrl]キーを押しながらShapeをマウスドラッグすれば 複製しながら配置ができますのでそれが手っ取り早いような。

noname#140971
質問者

補足

Sub cmdUpdateSokueki_1()   Set myDocument = Worksheets("共同調査データ")   Dim r        As Range    ' 読み込むRange   Dim shapeID     As Integer   ' C14,C15,・・・の値   Dim kanType     As Integer   ' 管の状況   Dim kanDiameter   As Integer   ' 管の直径   Dim shapeDiameter  As Integer   ' 円の直径   With myDocument     For Each r In .Range("C14", .Range("C65536").End(xlUp))       shapeID = r.Value       kanType = r.Offset(, 1).Value       kanDiameter = r.Offset(, 4).Value       shapeDiameter = r.Offset(, 4).Value       updateShapes "特殊部管理台帳", shapeID, kanType, kanDiameter, shapeDiameter     Next r   End With End Sub C14,C15・・・に調査した管の番号が入力されています。 管の状況、管の状況、円の直径等は、横のセルに。 それを順次読みとって updateShepes()に渡すことにしました。 Public Sub updateShapes(ByVal docuName As String,             ByVal shapeID As Integer,             ByVal kanType As Integer,             ByVal kanDiameter As Integer,             ByVal shapeDiameter As Integer)   Set myDocument = Worksheets(docuName)   Dim sp   As Shape   Dim no   As String   Dim txtMuki As String ' 右向き文字か左向き文字か   For Each sp In myDocument.Shapes     With sp       If .AutoShapeType = msoShapeOval Then         no = .TextFrame.Characters.Text         txtMuki = xxxx       End If     End With   Next sp End Sub ところで、壁面は4つあり、壁面毎に文字の向きが違います。同一シートに同じ円識別子である番号を持つ○が複数存在することになります。側壁1(cmdUpdateSokueki_1)は、左向きの文字で同じ識別子を持つ円を更新します。 補足質問: txtMuki = xxxx この1行が書ければ、多分、目的は達成されます。 できれば、教えていただくか、マニュアルの読むべき箇所をお願いします。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

#続き その作図シートのA1セルから調査データがあるとして (以下のレイアウト)   A B 1 N 管径 2  0 A 3  1 B 4  2 C 5  0 A : つまり、A2から下にデータが並んでいる場合。 Sub try()   Const A As Single = 20 '径(仮)   Const B As Single = 25   Const C As Single = 30   Dim sp As Shape   Dim r As Range   With ActiveSheet     For Each r In .Range("A2", .Range("A65536").End(xlUp))       Select Case r.Value       Case 0         Set sp = .Shapes("oval0").Duplicate       Case 1         Set sp = .Shapes("oval1").Duplicate       Case 2         Set sp = .Shapes("oval2").Duplicate       End Select       Select Case r.Offset(, 1).Value       Case "A"         sp.Width = A         sp.Height = A       Case "B"         sp.Width = B         sp.Height = B       Case "C"         sp.Width = C         sp.Height = C       End Select       sp.Name = "ov" & r.Address       sp.Left = r.Offset(, 2).Left       sp.Top = r.Offset(, 2).Top     Next   End With   Set sp = Nothing End Sub こんな感じでA2セルからA列最終行までLoopしてデータを読み取りながら 原型のShapeを複製します。 A列を基準にr.Offset(, 1)でB列データを読みます。 r.Offset(, 2)でC列に複製Shapeを配置します。 それと同時にA列のアドレスを複製Shapeの名前にします。 これで作成された複製Shapeを手動で配置してはどうですか? 更新の必要があればShapeの名前がアドレスで関連付けられてますから それが利用できるかと思います。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>Worksheets(3)などではなくシート名で指定する要領が判りません。 ここは Set myDocument = Worksheets("Sheet1") などと、シート名を文字列で指定してあげれば良いです。 ただ、複数シートを処理するなら、対象シートをまずActiveにして、 ActiveSheetに対して処理をしてもいいかもしれません。(『半自動化』なら) 他の要件については今ひとつ条件が不明確なので ズバリの回答は厳しいです。 ひとつの考え方としては、 まず、作図シートがActiveSheetだとして、原型となるShapeを作成します。 Sub プロト作成()   Const k As Single = 20   With ActiveSheet     With .Ovals.Add(200, 0, k, k)       .Name = "oval0"       .Placement = xlMove       .Border.Color = vbBlack       .Border.LineStyle = msoLineDash       .Interior.Color = vbWhite     End With     With .Ovals.Add(300, 0, k, k)       .Name = "oval1"       .Placement = xlMove       .Text = "1"       .Font.Size = 10       .HorizontalAlignment = xlCenter       .VerticalAlignment = xlCenter       .Border.Color = vbBlack       .Interior.Color = vbWhite       .Font.Color = vbBlack     End With     With .Ovals.Add(400, 0, k, k)       .Name = "oval2"       .Placement = xlMove       .Text = "2"       .Font.Size = 10       .HorizontalAlignment = xlCenter       .VerticalAlignment = xlCenter       .Border.Color = vbBlack       .Interior.Color = vbBlack       .Font.Color = vbWhite     End With   End With End Sub それぞれ"oval0","oval1","oval2"と名前をつけます。

noname#140971
質問者

お礼

早速の回答ありがとうございます。 マンホールの電気と通信の穴の数と配置の型は100程度あるようです。 型番号1~型番号90などの図面があります。 その図面を元に手書きで書き写し、かつ、写真を撮るとのこと。 作業者の手書きと写真を基に穴の現状を再現するのが作画の目的。 ところで、私は、あくまでも高齢者のセンターから派遣された臨時雇いです。 ですから、正社員が作り上げたやり方を踏襲しつつの半自動化。 1、データ入力シートを追加する。 2、穴の配置に応じた破線の○を配置しグループ化した図の集合シートを追加する。 この2つだけが臨時の私ができる改善です。 作業手順 1、集合シートより該当する図を選んで従来のシートにコピペ。 2、入力データに基づいて○を加工。 3、入力データに基づいて各穴の調査データを作成・完成する。 改善1、加工する図の原型が用意されることになる。 改善2、各○の加工が入力データで自動化されるのでミスが防げる。 改善3、各○の調査データもわざわざ入力しないでよくなる。 と、補足しておきます。 本日、午後2時より作業を開始します。 退職して2年。 今更、ExcelのVBAを書くことになろうとは思ってもいませんでした。 でも、工事用のプレハブで必死に作業している作業員の苦労を軽減してやりたいのです。 最低賃金に毛の生えたような報酬でも退職者にはありがたいものです。 さて、ExcelのVBAなんてExcel95のそれしか知りません。 ですから、実際に作業に入れば多分判らないことだらけ。 補足の説明を求めなければならないかも知れません。 そういう事情で、先ずはお礼はここまでとさせていただきます。 お礼を書いていない回答も目を皿のようにして読むつもりです。 本当に、早速の回答ありがとうございました。

関連するQ&A

  • EXCEL VBA で自在に図形を変化させたい(2)

    前回,質問させてもらい、非常に役に立つ回答をもらい解決しました。 今回、いろいろ本を見ても解決できない問題がありましたので再度質問をします。 EXCEL上にコマンドボタンを一つ配置します。右クリック→プロパティ→オブジェクト名をCmd作図に変更しておきます。 デザインモードでボタンをダブルクリックしてVBEでコード表示にします。 Private Sub Cmd作図_Click() ActiveSheet.Shapes.AddLine 200, 200, 400, 400 End Sub これでEXCEL上のコマンドボタンを押すと直線が作図できます。 次にAddLine以下の数字を変えて再度実行しますと別の直線がかけるのですが最初の直線が残ったままですので重なったりします。 前回、回答では Private Sub Cmd作図_Click() With ActiveSheet For Each Sh In .Shapes Sh.Delete Next Sh ActiveSheet.Shapes.AddLine 200, 200, 400, 400 End With End Sub という回答をもらっています。こうすれば前回描いた線を消してから作図できます。 しかし、前回は「マクロの実行」ボタンからの作図でしたので問題にはならなかったのですが、今回、EXCEL上にコマンドボタンを配置したところ、コマンドボタンもShapesと認識してしまうらしく、線と一緒に消されてしまいます。 この問題を解決できるコードを教えてもらいたいのですが。 よろしくお願いします。

  • エクセルVBAでもっとすっきりさせたい

    エクセル2000です。 ワークシート上にオートシェープの楕円を5個配置してあります。 それぞれ名前をOval_1~Oval_5と設定しました。 それぞれは以下のマクロを組み込み、クリックにより破線、実線と変更します。実線が選択されたしるしとします。 Oval_1~Oval_3で1グループ、Oval_4~Oval_5で1グループとし、それぞれのグループ内で1個の楕円しか選べないようにしたいのです。 一応、希望通りの動きはするのですが、何かすっきりしません。 もっと気の利いたコードはないでしょうか? Sub Oval_Check() With ActiveSheet If .Shapes(Application.Caller).Line.DashStyle = msoLineSolid Then 'クリックしたのが実線なら .Shapes(Application.Caller).Line.DashStyle = msoLineSquareDot ' 破線に Select Case Application.Caller 'クリックしたのが Case "Oval_4" 'Oval_4なら .Shapes("Oval_5").Line.DashStyle = msoLineSolid 'Oval_5を実線に Case "Oval_5" 'Oval_5なら .Shapes("Oval_4").Line.DashStyle = msoLineSolid 'Oval_4を実線に End Select Else 'そうでないなら .Shapes(Application.Caller).Line.DashStyle = msoLineSolid ' 実線に Select Case Application.Caller 'クリックしたのが Case "Oval_1" 'Oval_1なら .Shapes.Range(Array("Oval_2", "Oval_3")).Line.DashStyle = msoLineSquareDot 'Oval_2,Oval_3を破線に Case "Oval_2" 'Oval_2なら .Shapes.Range(Array("Oval_1", "Oval_3")).Line.DashStyle = msoLineSquareDot 'Oval_1,Oval_3を破線に Case "Oval_3" 'Oval_3なら .Shapes.Range(Array("Oval_1", "Oval_2")).Line.DashStyle = msoLineSquareDot 'Oval_1,Oval_2を破線に Case "Oval_4" 'Oval_4なら .Shapes("Oval_5").Line.DashStyle = msoLineSquareDot 'Oval_5を破線に Case "Oval_5" 'Oval_5なら .Shapes("Oval_4").Line.DashStyle = msoLineSquareDot 'Oval_4を破線に End Select End If End With End Sub

  • エクセル関数について

    教えて頂きたいんですが、エクセルの関数で=IF(シート!Q55="","○","")としている場合に シートIの55に何らかの数字が入力された場合は○も入力されないようにしたいんですが、 その関数の書き方はどうすればいいでしょうか? また元々の=IF(シート!Q55="","○","")の意味はシート!Q55に何もなければ○になるのは わかりますが、その右にある【,""】は何を意味しているんでしょうか? おわかりの方がいらっしゃいましたら教えてください。

  • 【エクセルVBA】特定のシートのみ検索したい

    VBA勉強中です。 フォルダにある複数のファイル(1ファイル内には複数シートあります)を順番に開けて検索をかけ、条件に合致した行をあるファイルへ転記・集約させるマクロを組みたいと思っています。 (条件は1番左の列が「○」であることです。) ネットや本を参考にしながら組んでみたのですが、「○」がない(シートの)行も転記されてしまい困っています。 (○があるシートは複数シートの内、1シートのみなのですが、○がないシートからも 「○があるシートの○がある行」と同じ行番号の行がが転記されているようです) 組んでみたマクロは以下のとおりです。 ------------------------------------------------ Sub 楕円1_Click() ActiveSheet.Range("A2:H30").ClearContents Dim ans, fn, wb, x, i, n, sh, myPath ans = "○" '条件 myPath = ThisWorkbook.Path & "\" fn = Dir(myPath & "*.xls") '選択したフォルダ内のExcelファイル Do Until fn = "" If fn <> ThisWorkbook.Name Then 'ファイルが当ファイル以外なら Set wb = Workbooks.Open(myPath & fn) '選択したファイルを開きます For Each sh In wb.Worksheets '各シートごとに x = sh.Cells(Rows.Count, 1).End(xlUp).Row '最終行取得 For i = 1 To x '1行目から最終行まで以下を実行します If Cells(i, 1) = ans Then '条件に合致するか検索 n = n + 1 With ThisWorkbook.Sheets("Sheet1") '転記 .Cells(n + 1, 1) = sh.Cells(i, "B") .Cells(n + 1, 2) = sh.Cells(i, "C") .Cells(n + 1, 3) = sh.Cells(i, "D") .Cells(n + 1, 4) = sh.Cells(i, "E") .Cells(n + 1, 5) = sh.Cells(i, "F") End With End If Next i Next sh wb.Close (False) '選択したファイルを閉じる End If fn = Dir() '次のファイルを検索 Set wb = Nothing Loop '繰り返し --------------------------------------------------------- このマクロでは各ファイルの全てのシートを検索していると思うのですが、 全シートを検索していることが問題でしょうか? 検索したいデータは特定のシートにのみ存在するので(全ファイル同じ名前のシートです) 特定のシートのみ検索してくれればそれで良いのですがどう変更すればよいかわかりません。 「For Each sh In wb.Worksheets '各シートごとに」 色々と調べてここを変更してみたのですが 何れもエラーとなり上手くいきませんでした。 どなたか上手く直す方法を教えて下さい。 宜しくお願いします。

  • VBA Excel2003 謎のエラー

    いろいろ検索してみたのですが、問題が解決できません。 エクセルのSheet1のA1からG16のセルの内容を一つずつ感知し、マイナスだったら赤、プラスだったら緑、それ以外だったら何もしないという処理にしたいです。 Private Sub Workbook_Open() ThisWorkbook.Sheets("Sheet1").Select ThisWorkbook.Sheets("Sheet1").Range("A1").Select Dim 英語 As Integer Dim 数字 As Integer Dim sheet1 As Worksheets sh1 = Worksheets("Sheet1") sh1.Activate 英語 = 1 数字 = 1 For 数字 = 1 To 16 For 英語 = 1 To 6 '選択位置が、マイナスだったら赤、プラスだったら緑、それ以外は無視 If Range(sh1.Cells(英語 & 数字)) < 0 Then Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 7 ElseIf Range(sh1.Cells(英語 & 数字)) > 0 Then Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 4 Else Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 0 End If 英語 = 英語 + 1 Next 英語 数字 = 数字 + 1 Next 数字 End Sub

  • VBAエクセル2003での下記の命令文の作成

    命令文: シート名:商品売上げのセルB16に入っている数字と シート名:売り上げのセルC16に入っている数字が同じなら メッセージBOXに○を表示させる そうでなければ メッセージBOXに×を表示させる これを作成するにはIF~elseを使えばいいと思いますが 作成できる方命令文を教えていただけますでしょうか。。。

  • EXCELのデータベース利用について(VBA)

    VBA初心者の者です。 下記の様なEXCELファイルを作りたいのですが、どのようにすれば良いのか まったくわかりません。 ACCESSでの構築が簡単なのかもしれませんが、データ量がそれほど多くないことと 職場にACCESSがないため、可能であればEXCELで構築したいと考えています。 私自身、プログラムの知識がなく、EXCEL VBAのサイトを確認するのですが、いまいち どうすれば良いのかわかりません。 ぜひご教授の程よろしくお願いします。 3つのシートの構成は以下になります。 【入力シート】 A1セルに文字列(A~Z)入力欄 【○○データシート】 A列に A~Z の文字列 B列に 001~100までの数値 C列に 001~100までの数値 D列に 001~100までの数値 E列に 001~100までの数値 例)    A列   B列   C列   D列   E列 1   A   001 2   B   001    002    003   004 3   C   003 4   D   002    003 【▽コマンドシート】 A列に 001~100までの一意の数字 B列に 文字列(コマンド) C列に 文字列(コマンド詳細) 例)    A列    B列    C列 1   001   xx     blank 2   002   xxx△   xxx 3   003   xxxx    x○ 4   004   xxxxx   xxx 【欲しいVBA】 1、入力シートのA1セルに○○データシートのA列に該当するA~Zの 文字列を入力。 2、○○データシートのB列~F列までの数値を参照 3、2の数値において▽コマンドシートのA列に記載ある番号と紐づけを行い、 ▽コマンドシートのB列、C列に記載がある文字列を入力シートのB列、C列にコピー ※コピー時は▽コマンドシートの書式や体裁情報も含めてコピー。 例としては以下になります。 入力シートの A1セルにDを入力した場合は 入力シート    A列    B列    C列 1   D    xxx△  xxx 2        xxxx    x○ 3 以上、ご教授よろしくお願いします。

  • エクセルVBA 呼出し

    エクセルVBA 呼出し FormをひらいてTextBox31に数字(ID番号)が入り それをSheet”計”のF4に入れます! そのF4を他のブックの WSName = "DATA.xls"にて IDを検索して、名前や色々なものをSheet”計”に写します。 それを再度、FromのそれぞれのTextBoxに入れます。 しかし、SH1.Cells(lngNumber, 2) = Worksheets("計").Range("B2").Value '名前 が上手くできません!!エラー表示などはないのですが… DATA.xlsにはID番号があるのですが、それを入力しても値が入りません どこの部分が間違っているのか? すいません、教えてください WSName = "DATA.xls"を呼出す記述は省略!! 'DATA.xlsとSheet1をセットする。 Set WS = Workbooks(WSName) Set SH1 = WS.Worksheets("Sheet1") 'ブックが存在していないのであればメッセージを出し処理を抜ける。 Else MsgBox WDName & "が存在していません。設置してください。", vbExclamation, "確認してください" Exit Sub End If flag = False For lng = 1 To lngYcnt_K '計のF4と同じ値を見つけてテキストボックスの値を入力。 If CStr(Worksheets("計").Range("F4").Value) = CStr(SH1.Cells(lng, 1)) Then flag = True lngNumber = lng Exit For End If Next lng If flag = True Then SH1.Cells(lngNumber, 2) = Worksheets("計").Range("B2").Value '名前 With Worksheets("計") ’計のSheetの値を開いているFromのTextBox4に再度値を入れる TextBox4.Value = .Range("B2").Value '計のSheetからTextBox1の値の名前’ End With MsgBox " 記録を呼び戻しました" Else TextBox31.Value = "確認必要" End If

  • Excel VBA シート名を条件に使用して…

    Excel2003を使用しています。 C列に特定の文字が入力されたら、その行のG列に、ある数式を入力したく、イベントマクロを作成しましたが、シートがたくさんあるときや、シートの追加がある場合は、クラスモジュールを使用するとよいということを過去の質問から参考にさせていただき、下記のクラスモジュールを作成しました。 ------------------------------------------------------- Public WithEvents myApp As Application Private Sub myApp_sheetchange(ByVal sh As Object, ByVal target As Range)  If Len(sh.Name) = 4 Then   If target.Column = 3 And target.Row >= 4 Then    If target.Value = "特定の文字" Then     Cells(target.Row, 7).FormulaR1C1 = "=数式A"    End If   End If  End If End Sub ------------------------------------------------------- 上記マクロを使用しているBook中の30数枚のシート名は「1234」というように、4桁の数字(全角)になっているのですが、さらに条件を加えて、例えば、シート名の数字が「1250」以下の場合は、Aという数式を入力し、シート名の数字が「2000」以上の場合は、Bという数式を入力するという条件でも可能でしょうか? 可能な場合、どのようにコードを記述すればいいのでしょうか? よろしくお願いします。

  • エクセルcountif である数字を含むセルを数える

    エクセルの基本的な質問で失礼します。 現在、以下のようなエクセルを作っています。 ちょっと分かりにくくて恐縮ですが… 元データであるシート「2」のA列にカンマ区切りで入力されている複数の数字を、 シート「1」で1つの数字ごとに横列に並べて、該当しているものには○を出すとしたいのです。 ただ、シート「1」のA1で 『=IF(COUNTIF('2'!A1,1)=1,"○","")』とすると、 セルが「1」のみの時しか○が表示されず、「1を含む場合」は○が出ません。 『=IF(COUNTIF('2'!A1,"*1*")=1,"○","")』ともしたのですが、 そうすると「1」のみの時にも○が表示されなくなってしまいました。 この場合、どういう式にするのが適切でしょうか? 恐れ入りますが、ご教示のほどよろしくお願い申し上げます。 ------------------------------------- シート「1」 ------------------------------------- A1「シート2のA1で1を含んでいる場合には○」  B1「シート2のA1で2を含んでいる場合には○」   C1「シート2のA1で3を含んでいる場合には○」 以下同様… ------------------------------------- シート「2」 ------------------------------------- A1「1,2,3,4」 A2「3,5」 A3「2」

専門家に質問してみよう