AIと戦って、あなたの人生のリスク診断 >>

EXCEL2010でセルが編集中(ダブルクリックやF2が押下された状態)が
わかる方法ってあるのでしょうか? VBAでマクロを作成しているのですが、
セルが編集中の場合はボタンを押下できないようにしたいのです。
EXCEL2000だと勝手にボタンが押下できない状態になっていますが、
EXCEL2010だとボタンが押せてしまい困っております。

ちなみにいろいろ調べたのですが、EXCEL2000ではセルが編集中かは
わからないみたいです(私の調べ方が悪いかも知れませんが、、、)

どなたがご教授願います。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

それは何だか面白そうですね・・・エラーが発生したりするんですか?



2010が無いので、アイディア程度ですが、
ツールバーの使用可否をチェックする手なんて使えないでしょうか?
ex) 2000ではシェイプ選択中、"書式設定"のコントロールが使用不可。
 b = Application.CommandBars("Formatting").Controls(1).Enabled
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelVBAでセルを編集状態にする方法

VBAを使ってセルを編集状態にするコードについてお聞きします。
Range("A1").Selectでセルを選択し、
Range("A1").value = "***"のように
文字を入力すると元々入力してあった文字が消えてしまいます。
入力してある文字列の文末を選択し、
次の文字列を入力するにはどのようにすればよいのでしょうか。
また、セルを編集状態にして、入力文字列の最後の1文字を消す方法を教えてください。
宜しくお願いします。

Aベストアンサー

>セルを編集状態にして、入力文字列の最後の1文字を消す方法を教えてください。
言葉から判断すれば、VBA上ではないと思います。
「編集状態」というのは、セルが「入力待ち状態」の意味ですから、一旦、「編集状態」をオフにしないと、マクロ自体が動かないからです。

>Range("A1").Selectでセルを選択し、
Select は、別に、編集状態にはなっていません。

また、一般的なマクロでは、RangeオブジェクトをSelect をする必要はありません。
以下の場合は、直接、Range("A1") と指定すればよいのです。

'文字を付け足す
ActiveCell.Value = ActiveCell.Value & "***"

'最後の文字を消す
With ActiveCell
 If Len(.Value) > 0 Then
  .Value = Left(.Value, Len(.Value) - 1)
 End If
End With

厳密に、「編集状態」=「入力待ち状態」から、編集をするマクロは、理論的にはありえないはずです。最初から、外部のプログラムに渡さないといけないわけですが、やったことはありません。たぶん、他のプログラムで出来るとは思いますが、ここで書いても評価されないでしょう。

単に、手動で入力待ちを解除してから、マクロを稼働させればよいだけなのですから。

>セルを編集状態にして、入力文字列の最後の1文字を消す方法を教えてください。
言葉から判断すれば、VBA上ではないと思います。
「編集状態」というのは、セルが「入力待ち状態」の意味ですから、一旦、「編集状態」をオフにしないと、マクロ自体が動かないからです。

>Range("A1").Selectでセルを選択し、
Select は、別に、編集状態にはなっていません。

また、一般的なマクロでは、RangeオブジェクトをSelect をする必要はありません。
以下の場合は、直接、Range("A1") と指定すればよいのです。

'文字を...続きを読む

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QエクセルVBAのフォームを最前面にする方法を教えてください。

エクセルVBAなのですが、UserForm1を最前面に表示して、
他のどのウインドウをアクティブにしても消えない状態にしたいのですが、
どのようなコードを書けばできるでしょうか。
VB.NETで表すとMe.TopMost = Trueとなると思うのですが、
エクセルVBAだとそのような書き方はないようです。

もうしわけございませんがご教示頂きたく、お願いいたします。m(__)m

Aベストアンサー

あらかじめ、フォームのプロパティの[ShowModal]をFalseにしておいて、以下のような方法ではダメでしょうか?
画面のアクティブイベントを利用するのは、個人的に嫌いなのですが。。。


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST As Long = -1
Private Const SWP_NOSIZE As Long = &H1&
Private Const SWP_NOMOVE As Long = &H2&


Private Sub UserForm_Activate()
Call SetWindowPos(GetForegroundWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

あらかじめ、フォームのプロパティの[ShowModal]をFalseにしておいて、以下のような方法ではダメでしょうか?
画面のアクティブイベントを利用するのは、個人的に嫌いなのですが。。。


Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOS...続きを読む

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む

QEXCEL VBAで2つEXCELを起動したときのブック名取得の方法

for each *** In workbooks・・・Nextで現在開いているexcelのブック名をすべて取得することができますが、2つめのexcelを起動し、そこで開いたブック名は取得することができません。
プロシージャは個人用マクロブックに記載しているのですが、複数起動したexcelのすべてのブック名を取得する方法をどなたかご存知の方いませんでしょうか?
excel2007を使用しています。よろしくお願いします。

Aベストアンサー

> 別プロセスのExcelは外注したアプリがデータを表示する際に
> 起動する...

(その外注アプリが)表示するデータとは、

 1)Excel ファイルを作成され、特定の場所に保存されている。
   表示は、そのファイルを開いているにすぎない。ファイルを
   改めて保存する必要はない
 2)Excel 画面で表示されるが、ファイルには書き出されていない。
   手動で保存しなければならない

のどちらですか?

1)の場合でファイル名が自明ならば、

  Dim xlApp As Application
  Set xlApp = GetObject(ファイルフルパス).Application

で別プロセスの Excel で開かれていても Application オブジェクト
は参照できますよ。

2)の場合は、厄介です。

QExcelVBA実行後に時々落ちる

VBA初心者です。
色々調べてみましたが、どうしても原因が判りません。よろしくお願いします。

Excel2007
Windows7

実行後時々Excelが落ちてしまいます。

エラーの内容
***************************
問題の署名:
問題イベント名:APPCRASH
アプリケーション名:EXCEL.EXE
アプリケーションのバージョン:12.0.6661.5000
アプリケーションのタイムスタンプ:4f7cda6d
障害モジュールの名前:EXCEL.EXE
障害モジュールのバージョン:12.0.6661.5000
障害モジュールのタイムスタンプ:4f7cda6d
例外コード:c0000005
例外オフセット:0004da42
OS バージョン:6.1.7600.2.0.0.256.48
ロケール ID:1041

この問題に関する追加情報:
LCID:1041
Brand:Office12Crash
skulcid:1041

*****************************

以下のVBAに問題があるのでしょうか?

内容は「フォームのテキストに数字を入力し、入力した回数繰り返す」というものです。

******************************

Private Sub キャンセル_Click()
MsgBox "キャンセルされました"
Unload 奉行変換
End Sub

Private Sub 変換実行_Click()
DM = 実行枚数.Value
実行枚数.Value = Empty
MsgBox DM & "枚の伝票を変換します"
Unload 奉行変換
変換
End Sub


**********************************

入力用のシートで入力した内容を他のシートにためていくものです。
以下の内容を標準モジュールに書いています。

**********************************

Public DM As Byte '入力フォームテキストに入力された数
Public BGyo As Integer
Public BCol As Integer

Sub 変換開始()
BGyo = ActiveCell.Row '入力セルの行取得
BCol = ActiveCell.Column '入力セルの列取得
奉行変換.Show
End Sub


Sub 変換()
Dim hgyo As Integer
Dim BGyoH As Integer

If BGyo = 5 Or BGyo Mod 23 = 5 And BCol = 2 Then ’特定のセルがアクティブな時だけ実行

データー用シートの最終行指定
hgyo = Worksheets("HANYO").Cells(1, 3).CurrentRegion.Rows.Count
hgyo = hgyo + 1

For n = 1 To DM
BGyoH = BGyo + 3
With Worksheets("HANYO")

.Cells(hgyo, 3).Value = Cells(BGyo, BCol)

.Cells(hgyo, 5).Value = Cells(BGyoH, BCol + 1)

.Cells(hgyo, 6).Value = Cells(BGyoH, BCol + 2)

.Cells(hgyo, 7).Value = Cells(BGyoH + 1, BCol + 2)

.Cells(hgyo, 8).Value = Cells(BGyoH, BCol)

If Cells(BGyoH + 1, BCol + 1) = 2 Then
.Cells(hgyo, 10) = 1
ElseIf Cells(BGyoH + 1, BCol + 1) = "" Then
.Cells(hgyo, 10) = ""
.Cells(hgyo, 11) = "0"
ElseIf Cells(BGyoH + 1, BCol + 1) = 1 Then
.Cells(hgyo, 10) = 1
.Cells(hgyo, 11) = 1
End If



.Cells(hgyo, 13).Value = Cells(BGyoH, BCol + 6)

.Cells(hgyo, 14).Value = Cells(BGyoH, BCol + 7)

.Cells(hgyo, 15).Value = Cells(BGyoH + 1, BCol + 7)

.Cells(hgyo, 16).Value = Cells(BGyoH, BCol + 10)



If Cells(BGyoH + 1, BCol + 6) = 2 Then
.Cells(hgyo, 18) = 1
ElseIf Cells(BGyoH + 1, BCol + 6) = "" Then
.Cells(hgyo, 18) = ""
.Cells(hgyo, 19) = "0"
ElseIf Cells(BGyoH + 1, BCol + 6) = 1 Then
.Cells(hgyo, 18) = 1
.Cells(hgyo, 19) = 1
End If

.Cells(hgyo, 21).Value = Cells(BGyoH, BCol + 4) & Cells(BGyoH + 1, BCol + 4)


End With
hgyo = hgyo + 1
BGyoH = BGyoH + 2
Next nd
BGyo = BGyo + 23

Next n
Else
MsgBox "アクティブセルが日付にありません。"
Exit Sub
End If

End Sub

Excelが落ちるのはこれを実行した後のみ時々起きますので
私が作成した内容に何か問題があるのだと思うのですが
調べても判りません・・・・

この内容で情報は足りるでしょうか?
よろしくお願いします。

VBA初心者です。
色々調べてみましたが、どうしても原因が判りません。よろしくお願いします。

Excel2007
Windows7

実行後時々Excelが落ちてしまいます。

エラーの内容
***************************
問題の署名:
問題イベント名:APPCRASH
アプリケーション名:EXCEL.EXE
アプリケーションのバージョン:12.0.6661.5000
アプリケーションのタイムスタンプ:4f7cda6d
障害モジュールの名前:EXCEL.EXE
障害モジュールのバージョン:12.0.6661.5000
障害モジュールのタイムスタンプ:4f7cda6d
例外コー...続きを読む

Aベストアンサー

こんにちは。

一応ひとつひとつ確認していきますが

>  Next nd

Neext に対応する For がありません。
確実にコンパイルエラーになる間違いです。
誤って消してしまった関連の記述があったのか、
関連の記述を削除した時に消し忘れたものが残ってしまっているのか、
確認しましょう。
///
 
 
以下、今回のトラブルに直接関わりがあるかは状況次第ですが、 

>  Public DM As Byte '入力フォームテキストに入力された数

Byte 型というのは、バイナリデータのやり取りに使う為のものですから
こういう使い方をするものではありません。間違いです。
ユーザーフォームの TextBox の .Value から
数値文字列を格納するのなら Variant 型が正解です。

  Public DM As Variant

確認の上、書換えておいた方が無難です。
///
 
 
>  Public BGyo As Integer
>  Public BCol As Integer
 
>  Dim hgyo As Integer
>  Dim BGyoH As Integer
以上4点の宣言は Long 型を使うのが正常です。
.Row プロパティ、.Column プロパティ の戻り値は Long 型です。
Integer 型には収まりきらない大きな数値を扱いますから
必然 Long 型になる、という覚え方でも、当面は構わないですけれど、
本来は取得するプロパティに合わせるものです。
  Public BGyo As Long
  Public BCol As Long

  Dim hgyo As Long
  Dim BGyoH As Long
後になってからエラー原因になりそうな不備は直しておきましょう。
///
 
 
Sub 変換() に欠けてる宣言は以下。これは今回のトラブルとは無関係です。
  Dim n As Long
  Dim nd As Long
(但し、nd に関しては、推測です。)
///
 
 
以上は、比較的基本的で、環境や動作条件に左右されないレベルの手当てです。
確認して、それでも解決できない場合、は以下。
 
 
  Sub 変換開始()
これは、どうやって呼び出してますか?
シート画面からAlt + F8などでマクロを直接実行するのでしょうか?
もしそうなら、このセクションは読み飛ばして結構です。
シートにあるボタンやシェイプから実行させている場合は
その点、具体的で詳細な情報が必要です。
また、他のマクロから呼び出している場合も同様です。
///
 
 
以上で解決の目途が立たない場合は、試しに
>  奉行変換.Show

  奉行変換.Show vbModeless
に換えてから実行するとどうなるか、知らせてください。
Worksheets("HANYO") にシートの保護を適用しているかどうか知らせてください。
///
 
 
以上、とりあえず、気が付いた点だけレスしておきます。
確認してみてください。

こんにちは。

一応ひとつひとつ確認していきますが

>  Next nd

Neext に対応する For がありません。
確実にコンパイルエラーになる間違いです。
誤って消してしまった関連の記述があったのか、
関連の記述を削除した時に消し忘れたものが残ってしまっているのか、
確認しましょう。
///
 
 
以下、今回のトラブルに直接関わりがあるかは状況次第ですが、 

>  Public DM As Byte '入力フォームテキストに入力された数

Byte 型というのは、バイナリデータのやり取りに使う為のものですから
こういう使...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング