• ベストアンサー

VB Excel操作でActiveCellの文字変換

VisualBasic6.0 (初心者) 保管場所が指定されない(様々な)Excelファイルを開き、ActiveCellの文字を変換(大文字・小文字・半角など)出来るよう下記コードを考えました。 この場合、Load後にExcelを起動しないとActiveCellが得られません。 Load時にMsgBox ActiveCellを入れたのは、たまたまExcelを起動させたらActiveCellが得られ、文字が変換出来たからです。 これは何故でしょう?? また、起動中のExcelファイルを再起動させなくてもActiveCellが得られる方法は無いでしょうか? '------------------------------------ Private Sub C1_Click() Dim TTT As String Dim UUU As String On Error Resume Next If ActiveCell.Row = 0 Then MsgBox "Active Excel 無し" Else TTT = Cells(ActiveCell.Row, ActiveCell.Column).Value UUU = StrConv(TTT, 1) Cells(ActiveCell.Row, ActiveCell.Column).Value = UUU End If On Error GoTo 0 End Sub '------------------------------------ Private Sub Form_Load() On Error Resume Next MsgBox ActiveCell On Error GoTo 0 End Sub

  • mmac
  • お礼率94% (64/68)

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>これは何故でしょう?? ActiveCellってのは「選択されているセル」の事です。 エクセルファイルを起動すると、必ずどれかのシートがアクティブでそのシートのどこかのセルが必ず選択されています。 起動時にどのシートのどのセルがアクティブになるかは、終了時の状態が保存されるだけなので、保存した人以外はどのセルがアクティブになっているかは全く解らない状態です。 起動後に任意のセルをアクティブにしたいなら、RangeやCellsを使って「セル位置を指定」してください。 MsgBox ActiveCell.Address とすれば、アクティブセルのアドレスが表示出来ます。 >TTT = Cells(ActiveCell.Row, ActiveCell.Column).Value 全く無意味。 TTT = ActiveCell.Value と同じですよね。

mmac
質問者

お礼

質問の内容が分かりにくく失礼致しました。 フォームロード時に MsgBox ActiveCell や ActiveCell.Value = StrConv(ActiveCell.Value, 1) などを入れないと、その後立ち上げたExcelのセルを選択しても ActiveCell.Row = 0 になってしまうのです?? もしくはロード時は未入力で、コマンドボタンC1をクリックした後 Excelを立ち上げれば出来ます。 >全く無意味。 >TTT = ActiveCell.Value と同じですよね。 参考になりました ActiveCell.Value = StrConv(ActiveCell.Value, 1) の一行で済む事でした。

mmac
質問者

補足

回答有り難う御座いました。

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

VB6.0がExcelファイルの”アクティブセル”の値を取得するには、Excelを起動させないと 無理なように思いますけど。 ⇒どこのセルがアクティブなのかは閉じていたらわからないかと。 Private Sub Form_Load() Dim xlapp As New Excel.Application Set xlapp = CreateObject("Excel.Application") xlapp.Visible = True xlapp.Workbooks.Open ("D:\Book1.xls") End Sub Private Sub Command1_Click() Dim xlwb As Object Set xlwb = GetObject(, "Excel.Application") MsgBox (xlwb.ActiveCell.Address) End Sub こんな感じとか? 的はずれでしたらごめんなさい。

mmac
質問者

お礼

回答有り難う御座いました。 質問の内容が分かりにくく失礼致しました。 >VB6.0がExcelファイルの"アクティブセル"の値を取得するには、Excelを起動させないと >無理なように思いますけど。 確かに MsgBox ActiveCell をExcel立ち上げる前に実行しても意味が無いように思いますが、 何故かこれを実行させておくと後にどのExcelを立ち上げても ActiveCell を取得出来るのです?? 最初は新規Excelを立ち上げてこれを実行させ新規Excelを閉じていましたが それを短縮した結果(既に開いているExcelも閉じてしまう為)こうなりました。

mmac
質問者

補足

MsgBox ActiveCell をExcelを立ち上げる前に実行した場合。 Ctr+Alt+Delete のプロセスの中に EXCEL.EXE が追加されます。 (Excelを立ち上げていないのに・・・?) これが追加されている間は、どのExcelを立ち上げてもシートの セルを選択してコマンドを実行すれば、アクティブなセルの値を 得ることが出来ます。 Excelとフォームの両方を終了させた場合、プロセスから EXCEL.EXE が削除されます。 このやり方は間違いなのでしょうか・・

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>ActiveCellの文字 とはどういうことを考えているのか? 1つのブックにシートは通常、複数あり各シートにアクチヴセルは有る (残っていると言えよう)。 Sub test01() Dim sh For Each sh In Worksheets MsgBox sh.Name sh.Activate MsgBox ActiveCell.Address Next End Sub ーー Sub test01() Dim sh For Each sh In Worksheets MsgBox sh.Name MsgBox ActiveCell.Address Next End Sub ならアクチブシート(1つしかない)アクチブセルを表示する。 ーー 場合によってはShhetActivateイベントを使うが必要 がある Private Sub Workbook_SheetActivate(ByVal Sh As Object) MsgBox Sh.Name MsgBox ActiveCell.Address End Sub === >起動中のExcelファイルを再起動させなくてもActiveCellが得られる方法は無いでしょうか >Load後にExcelを起動しないとActiveCellが得られません。 この意味は良くわかりません。 Loadとは何をLoad?Form?それまでFormの話は出てないじゃない。 == ブックを読まずに、そのセルの文字列を置換とかしたいということか?

mmac
質問者

お礼

回答有り難う御座います。 質問の内容が分かりにくく、失礼致しました。 なるほど、この方法だとシートとセルの情報が分かりますね。 参考になりました。 初心者の為ShhetActivateの使い方は分かりませんでした。 実際にやりたい事は起動中又はおっしゃる通りFormをLoad後に立ち上げたExcelの いずれかのセルを自ら選択しそのセルに入力されている数字や英字などを StrConvを使用して変換したいです。 しかし、FormをLoad後は出来たのですがFormをLoad前に立ち上がっているExcelへは ActiveCell.Row = 0になってしまいました。

関連するQ&A

  • VBからExcelを操作

    VisualBasic6.0(初心者) VBを始めたばかりで、Excelの入力文字をVBで変換しようと考えています。 様々な保管場所にあるExcelを開いて選択セルの文字をコマンドボタンで変換しようと下記コードを考えました。(一部) 問題は、Load時にすでに開いているExcelを閉じてまいます。 何か良い方法は無いでしょうか?(アクティブなExcelを操作したい) また、下記コードで不適切なところがありましたら御教授願います。 Private Sub Form_Load() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) Set xlApp = GetObject(, "Excel.Application") With xlApp.Selection Cells(1, 1).Value = "" End With xlApp.DisplayAlerts = False xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing End Sub '----------------------(大文字変換) Private Sub CB2_Click() On Error Resume Next If ActiveCell.Row = Null Then MsgBox "Excel が見つかりません" Else Dim xlApp As Excel.Application Set xlApp = GetObject(, "Excel.Application") If Err.Number Then MsgBox "Excel が起動されていません" Else Dim X As Long Dim Y As Long Dim Hmae As String Dim Hgo As String X = 0 Y = 0 With xlApp.Selection Do Do Hmae = Cells(ActiveCell.Row + X, ActiveCell.Column + Y).Value Hgo = StrConv(Hmae, 1) Cells(ActiveCell.Row + X, ActiveCell.Column + Y).Value = Hgo X = X + 1 Loop Until X >= .Rows(.Rows.Count).Row - .Row + 1 X = 0 Y = Y + 1 Loop Until Y >= .Columns(.Columns.Count).Column - .Columns(1).Column + 1 End With End If xlApp.DisplayAlerts = False Set xlApp = Nothing End If End Sub

  • (VB初心者) VB起動時既に起動されているExcelの情報

    VisualBasic 6.0 初心者です。 既に起動しているExcelの後にVisualBasicを立ち上げた場合、 既に起動しているExcelの情報を得ることが出来るのでしょうか? やりたい事は Excel起動⇒VB起動⇒Excelのセルを選択⇒そのセルに入力されている値 を取得。 VB起動⇒Excel起動の場合はActiveCellの値を取得出来たのですが 既に起動しているExcelの場合 エラー になってしまいます。 お手数ですが、ご教授願います。 Private Sub コマンド1_Click() MsgBox ActiveCell End Sub 'Form_Load時にこれを実行しないと開いたExcelのアクティブセル値を得られない?? Private Sub Form_Load() MsgBox ActiveCell End Sub

  • エクセル VBA セルのデータを見に行ったのですが・・・

    いつも皆様には大変お世話になっております。 エクセルVBAなのですが・・・ sa = ActiveCell.Row tu = ActiveCell.Column z = Cells(sa + 18, tu + 3).Text MsgBox z If z = "" Then sa = ActiveCell.Row tu = ActiveCell.Column Cells(sa + 18, tu + 3) = a Else sa = ActiveCell.Row tu = ActiveCell.Column Cells(sa + 32, tu + 3).End(xlUp).Offset(1, 0) = a と、入力したのですが z = Cells(sa + 18, tu + 3).Text この zのセルに文字が入っていても MsgBox z  をみても何も入っていないと表示されてしまいます。 何が原因かさっぱりわかりません;; 皆様よろしくお願いいたします

  • 「R = ActiveCell」がエラーになる。

    エクセルvbaです。 下記のコードのどこがおかしいのか教えてください。 Sub Macro1() Dim R As Range R = ActiveCell If R Like "*1*" Then MsgBox "1があります" End If End Sub アクティブセルに「1」があれば、 MsgBoxを表示したいのですが うまくいきません。 オブジェクト変数または With ブロック変数が設定されていません。(Error 91) というエラーになります。 If ActiveCell Like "*1*" Then ではなく、一度、変数Rに格納したいです。 解決策をよろしくお願いします。

  • Excelで検索結果表示の修正

    下記のマクロでA列だけ検索できるようにしたいのですが、どこを修正したらいいのか教えてください。 Private Sub CommandButton1_Click() AAA End Sub Sub AAA() strMoji$ = UserForm1.TextBox1.Text If UserForm1.TextBox1.Text = "" Then MsgBox "検索条件を入力してください。", 48 Exit Sub End If On Error GoTo Fail Cells.Find(What:=strMoji, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ ).Activate lonNUM& = Selection.Row UserForm1.TextBox2.Text = Cells(lonNUM, 2).Value UserForm1.TextBox3.Text = Cells(lonNUM, 3).Value Exit Sub Fail: MsgBox "該当なし", 48 End Sub Private Sub UserForm_Click() End Sub

  • EXCEL VBAで空白削除のマクロを作りましたが

    削除されません。 下記のとおりですが、どう考えても動きません、どなたか修正をお願いします。 初心者です。宜しくお願いします。 Sub Ksakujyo() Dim ObjRange As Range On Error Resume Next Set ObjRange = Application.InputBox("削除範囲を選択して下さい。", "印刷範囲", Type:=8) On Error GoTo 0 If ObjRange Is Nothing Then MsgBox "キャンセルされました。" End If If Selection.Count = 1 Then Exit Sub On Error Resume Next Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp Exit Sub End Sub

  • VBEについて

    例えば Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) '***** 特定セルを選択するとイベントを実行する ***** Dim tate As Long Dim yoko As Long Dim 数量 As Long Dim 判定 As Integer tate = ActiveCell.Row yoko = ActiveCell.Column If yoko = 2 Then On Error GoTo skip01 数量 = InputBox("数量を入力してください。") 判定 = MsgBox("数量 = " & 数量 & " で間違いありませんか?", vbYesNo + vbInformation) If 判定 = vbYes Then Cells(tate, 2) = Cells(tate, 2) + 数量 End If End If skip01: End Sub ですが、上記コードでは2行目のみの物になりますが、例えば7と8行目にしたいときなどはどうすればいいのでしょうか?素人質問ですが宜しくお願い致します。

  • エクセル マクロ 特定の文字の色を変更

    Private Sub CommandButton6_Click() MsgBox Mid(ActiveCell, InStrRev(ActiveCell, "⇒") + 1) End Sub このようなマクロがあり 選択しているセルの最後から⇒まで部分をMsgboxで表示してくれますが この文字の色を変更したい場合はどうすればいいでしょうか?

  • エクセル マクロ CASEの使い方

    超初心者です。よろしくお願いします。 以前にこのような使い方を教わりました。 Sub test1() Select Case Cells(ActiveCell.Row, "b").Value Case "夏" test2 Case "冬" test3 End Select End Sub 夏と冬で条件を分けているのですが、これを変えて Cells(ActiveCell.Row, "b").Value が空白じゃないときにtest2を実行して空白のときにtest3を実行するためにはどのように書いたら良いですか?

  • Excel  VBAのマクロについて

    以下のようなマクロを作りました。 P4に開始番号P6に終わりの番号があるのですが、P4=P6、つまり、一つだけのシートを作成する分には問題なく動きます。しかしP4に1、P6に5と範囲を増やすとエラーが出て動きません。どこをなおしたらよろしいでしょうか? Option Explicit Sub 一括() Dim I As Worksheet Dim SheetName As String Dim Prompt As String Dim Col As Integer Dim Cell As Range Dim Row As Long Dim hani As Long For hani = Range("P4").Value To Range("P6").Value Set I = ActiveSheet SheetName = Cells(hani + 4, "K").Value & "(" & Cells(hani + 4, "B") & ")" Prompt = SheetName & "が存在します。" Sheets("基本シート").Copy After:=Sheets("基本シート") On Error GoTo 100 ActiveSheet.Name = SheetName On Error GoTo 0 Range("X3") = I.Cells(hani + 4, "B") Range("E8") = I.Cells(hani + 4, "C") Range("A13") = I.Cells(hani + 4, "D") For Col = 0 To 8 Step 4 Set Cell = I.Cells(hani + 4, "D").Offset(, Col) If Cell > 0 Then Prompt = "該当する日付がありません。" & Cell.Address On Error GoTo 100 Row = WorksheetFunction.Match(Cell, [A:A], 0) On Error GoTo 0 Cells(Row, "E") = I.Cells(hani + 4, "E").Offset(, Col) Cells(Row, "H") = I.Cells(hani + 4, "F").Offset(, Col) If Col < 8 Then Cells(Row, "Y") = I.Cells(hani + 4, "G").Offset(, Col) End If End If Next Col Next hani End 100 If Err <> 1004 Then Error Err End End If MsgBox Prompt, vbCritical Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True Sheets(1).Select End Sub

専門家に質問してみよう