OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Excelマクロについて

  • 困ってます
  • 質問No.236834
  • 閲覧数103
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

セルの番地をマクロを使って変えていきたいのですが、
例えばRange(A1)というところを(xy)のようにして、X、Yを20箇所ぐらい変えて、画像の貼付などの処理も同時に自動化していきたいのです。
Doとか使えばいいのでしょうか?
繰り返し、作業させたいのです。
わかりにくいかもしれませんが、よろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル7

ベストアンサー率 68% (11/16)

Rengeと同じもので
Cellsというものがあります。
これは数字座標で書くもので
Range(D2)なら
Cells(2,4)と数字で行、列の順に指定します。

変数も可能で
行 = 2
列 = 4
Cells(行,列).Select
とできます。

3行目、6行目、9行目に画像を貼るなら
処理ごとに
行 = 行 + 3
Cells(行,列).Select
とします。
規則性が無い場合は質問下さい。


貼り付ける写真の数が決まっていれば

For カウンタ = 1 To 最後の数

処理-画像を呼び出すなど-

Next

ちなみに下は
Application.Dialogs(xlDialogInsertPicture).Show

結果 = Application.Dialogs(xlDialogInsertPicture).Show
if 結果 = false then exit sub
endif

とすると画像選択時の「キャンセル」に
対応できます。
お礼コメント
noname#192965

ありがとうございました。
とても役に立ちました。
何度もご回答ありがとうございました。
投稿日時 - 2002-03-21 21:27:23
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1

こんにちは。こんな例はどうでしょう。 A1のセルを基準にして、行、列をオフセット値で指定します。 ここで、 Range("A1")はRange("A1").Offset(0,0) Range("B2")はRange("A1").Offset(1,1) のことです。 B1を左端上とする領域に、九九の表を作って ...続きを読む
こんにちは。こんな例はどうでしょう。

A1のセルを基準にして、行、列をオフセット値で指定します。
ここで、
Range("A1")はRange("A1").Offset(0,0)
Range("B2")はRange("A1").Offset(1,1)
のことです。

B1を左端上とする領域に、九九の表を作ってみます。
Sheet1がアクティブになった時じ実行されるマクロとして、
Private Sub Worksheet_Activate()
For r = 1 To 9
For c = 1 To 9
Sheet1.Range("A1").Offset(r, c).Value = r * c
Next c
Next r
End Sub

です。如何でしょう。
お礼コメント
noname#192965

とても役に立ちました。
ありがとうございました。
投稿日時 - 2002-03-21 21:23:21

  • 回答No.2
レベル14

ベストアンサー率 28% (4322/15243)

ほんとに後半部分自信がないのですが、思ったところを述べます。 Sub test01() i = Array(0, 1, 3, 5, 7) '1,2,3,5,7列 j = Array(0, 2, 3, 7, 9) '2=B、3=C,7=G,9=Iの要領で入れて '下さい。小さいもの順である必要なし。 ' 上の例では、 i と j のペアーでB1, ...続きを読む
ほんとに後半部分自信がないのですが、思ったところを述べます。
Sub test01()
i = Array(0, 1, 3, 5, 7) '1,2,3,5,7列
j = Array(0, 2, 3, 7, 9) '2=B、3=C,7=G,9=Iの要領で入れて
'下さい。小さいもの順である必要なし。
' 上の例では、 i と j のペアーでB1,C3,G5、I7を表します
’------
For k = 1 To 4
Worksheets("sheet1").Cells(i(k), j(k)) = "a"
' ="a"はこの例では、一定値にしていますが、値や数値であれば
' 配列で処理できます。
' l=array("0","west","east","north","south")とし
' ="a"のところを,=l(k)にします。#1の解答もここまでしか 答えていないのですが、私ならこの後の画像のセットが難しいと思うので説明が要ると思う。 画像等のファイル名を指定する必要があれば、サブルーチンの 引数をファイル名にして,
' ファイル名のストリングを配列化してください.
' フルパス名の最後辺りの、変わる部分のみを配列化して
' GETPICTURE関数のような関数の引数=不変部分 & (k)
'とすることになるでしょう。
' そしてコピーできるものなら、貼りつけるセルを
' Worksheets("sheet1").Cells(i(k), j(k)).selectして
' ActiveSheet.Paste することになるのでしょうか。
' この部分の経験と自信がありません。
Next k
エクセルで画像やオブジェクトを表示する位置をしめすのは
LEFT,TOP,WIDE、HEIGHTで表すものが多いのでは
ないでしょうか。セルの左上隅に位置付ける表現を許すメソド等はあるのでしょうか。
お礼コメント
noname#192965

とても役に立ちました。
ありがとうございました。
投稿日時 - 2002-03-21 21:24:40
  • 回答No.3
レベル13

ベストアンサー率 68% (791/1163)

画像の個数も不定で、位置をどのようにつかんで、シートにどのように反映するかが問題ですね。 画像(図形)とセルを関連付けるTopLeftCellプロパティは値の設定はできないはずなので、Top、Leftを使って座標指定することになるのでしょうか。 その前提で処理例を書いてみました。数種のjpeg画像(Picture)と図形で検証しました。 ●画像の位置を取得<get_ShapesPot()>   ...続きを読む
画像の個数も不定で、位置をどのようにつかんで、シートにどのように反映するかが問題ですね。
画像(図形)とセルを関連付けるTopLeftCellプロパティは値の設定はできないはずなので、Top、Leftを使って座標指定することになるのでしょうか。
その前提で処理例を書いてみました。数種のjpeg画像(Picture)と図形で検証しました。

●画像の位置を取得<get_ShapesPot()>
 画像があるシートをSheet1として、Sheet2に画像の情報『セル座標・行位置・列位置・画像名』と
 表題『新・行位置・新・列位置』を書きます。
 画像は既にSheet1にテキトーに貼り付けられているとしています。
●画像を指定位置にセット<set_ShapesPot()>
 Sheet2のE、F列『新・行位置・新・列位置』に配置しなおす位置を入力します。
 元の『行位置・列位置』を参考にすれば入力しやすいでしょう。
 set_ShapesPotを実行すれば、全ての画像を指定した位置に再配置します。

 2つのマクロをショートカットキーに割り当てれば操作性も上がるでしょう。
 標準モジュールに貼り付けます。ご参考に。(Excel2000です)

↓ここから
Dim wsShp As Worksheet '画像のあるシート
Dim wsPot As Worksheet '画像位置を表示するシート
Dim c As Integer '行カウンタ

'画像の位置を取得
Sub get_ShapesPot()
  Dim shp As Shape '画像

  Set wsShp = Worksheets("Sheet1")
  Set wsPot = Worksheets("Sheet2")

  c = 0
  With wsPot
    .Range("A1:D1") = Array("セル座標", "行位置", "列位置", "図形名")
    .Range("E1:F1") = Array("新・行位置", "新・列位置")
    For Each shp In wsShp.Shapes
      c = c + 1
      .Range("A" & c + 1) = shp.TopLeftCell.Address(False, False)
      .Range("B" & c + 1) = shp.Top
      .Range("C" & c + 1) = shp.Left
      .Range("D" & c + 1) = shp.Name
    Next
  End With
End Sub

'画像を指定位置にセットする
Sub set_ShapesPot()
  Set wsShp = Worksheets("Sheet1")
  Set wsPot = Worksheets("Sheet2")

  Application.ScreenUpdating = False
  wsPot.Activate

  On Error GoTo ErrorHandler
  c = 2
  While wsPot.Range("D" & c) <> ""
    wsShp.Shapes(Range("D" & c)).Top = Range("E" & c)
    wsShp.Shapes(Range("D" & c)).Left = Range("F" & c)

    c = c + 1
  Wend

  wsShp.Activate
  Application.ScreenUpdating = True
  Exit Sub

ErrorHandler:
  Resume Next
End Sub
お礼コメント
noname#192965

とても役に立ちました。
ありがとうございました。
投稿日時 - 2002-03-21 21:25:48
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ