Google グループは Usenet の新規の投稿と購読のサポートを終了しました。過去のコンテンツは引き続き閲覧できます。
表示しない

VBAで一連番号の書き込み

閲覧: 9 回
最初の未読メッセージにスキップ

沙門

未読、
2003/06/22 19:30:412003/06/22
To:
こんにちは、よろしくご教授を
Excel2000でのデータ入力です

入力行に必要なデータをいれて、マクロを実行すると、
入力データを一覧表の一番下にコピーして、入力行をクリアーします。
 これはこれで良いのですが次の点の機能を加えたいのですがよろしく

一覧表に一連番号を入れる
 最初から記入しておくと、その記入最後行をデータ入力最後行と認識す
 るので、はじめから書いておけない。

Range().select
Range().value

を組み合わせてみましたが、エラーがでてしまいます(;。;)

A B C D E    F
     ┏━━━┳━━━┳━━━┳━━━┳━━━┓
1     ┃日付 ┃氏名  ┃住所  ┃電話  ┃備考  ┃
    ┣━━━╋━━━╋━━━╋━━━╋━━━┫
2     ┃    ┃    ┃    ┃    ┃    ┃
    ┗━━━┻━━━┻━━━┻━━━┻━━━┛

一覧表
┏━━━┳━━━┳━━━┳━━━┳━━━┳━━━┓
 ┃番号  ┃    ┃    ┃    ┃    ┃    ┃
┣━━━╋━━━╋━━━╋━━━╋━━━╋━━━┫
 ┃    ┃    ┃    ┃    ┃    ┃    ┃
┗━━━┻━━━┻━━━┻━━━┻━━━┻━━━┛

こんな感じです

Sub 入力()

range("B2").select

Dim コピー行, レコード数, ペースト行 As Integer
コピー行 = Selection.Row
レコード数 = ActiveCell.Offset(2, 0).CurrentRegion.Rows.Count
ペースト行 = ActiveCell.Offset(2, 0).Row + レコード数

Range(Selection, Selection.End(xlToRight)).Copy
Cells(ペースト行, 2).Select
ActiveSheet.Paste
Application.CutCopyMode = False

For i = 2 To 6
Cells(コピー行, i).ClearContents
Next i

range("B2").select

End Sub


雑誌PCMODEから
(著作権:記事の全部または一部を...なんてのがあるけど探し
ましたがみあたらないので、書き込みました)

沙門

koun...@mbh.nifty.com

未読、
2003/06/22 23:38:112003/06/22
To:
鴻池です。

"沙門" <go...@ca2.so-net.ne.jp> wrote in message
news:bd5e71$f68$1...@news01cg.so-net.ne.jp...


> 入力行に必要なデータをいれて、マクロを実行すると、
> 入力データを一覧表の一番下にコピーして、入力行をクリアーします。
>  これはこれで良いのですが次の点の機能を加えたいのですがよろしく

元のコードを利用するなら,次のようなものでどうでしょうか。

> Sub 入力()
>
> range("B2").select
>
> Dim コピー行, レコード数, ペースト行 As Integer
> コピー行 = Selection.Row
> レコード数 = ActiveCell.Offset(2, 0).CurrentRegion.Rows.Count
> ペースト行 = ActiveCell.Offset(2, 0).Row + レコード数
>
> Range(Selection, Selection.End(xlToRight)).Copy
> Cells(ペースト行, 2).Select
> ActiveSheet.Paste
> Application.CutCopyMode = False
>

'ここに以下を追加

If Not IsNumeric(Cells(ペースト行 - 1, 1)) Then
Cells(ペースト行, 1) = 1
Else
Cells(ペースト行, 1).Value = Cells(ペースト行 - 1, 1) + 1
End If

> For i = 2 To 6
> Cells(コピー行, i).ClearContents
> Next i
>
> range("B2").select
>
> End Sub

ただし,私は上の
Range(Selection, Selection.End(xlToRight)).Copy
ようにEndを使うのは,極力避けています。データを消しても,記録として最終セル
として残るケースがあるので。(入力でEndを使い,クリアで For i = 2 To 6とセル
を指定しているのが,どうしてかなと思いますが。)

このマクロは,入力欄が空白でも追加されてしまうので,入力欄のチェックを追加し
たほうが,使いやすいと思います。

--
******************************
keizi kounoike
******************************

沙門

未読、
2003/06/23 4:25:522003/06/23
To:
沙門です

<koun...@mbh.nifty.com> wrote in message
news:bd5tj1$dp9$1...@news512.nifty.com...
> 鴻池です。
> 元のコードを利用するなら,次のようなものでどうでしょうか。

早速のご教授、ありがとうございます

> 'ここに以下を追加
>
> If Not IsNumeric(Cells(ペースト行 - 1, 1)) Then
> Cells(ペースト行, 1) = 1
> Else
> Cells(ペースト行, 1).Value = Cells(ペースト行 - 1, 1) + 1
> End If
>

> ただし,私は上の
> Range(Selection, Selection.End(xlToRight)).Copy
> ようにEndを使うのは,極力避けています。データを消しても,記録として最終セ

> として残るケースがあるので。(入力でEndを使い,クリアで For i = 2 To 6とセ

> を指定しているのが,どうしてかなと思いますが。)
>
> このマクロは,入力欄が空白でも追加されてしまうので,入力欄のチェックを追加

> たほうが,使いやすいと思います。

勉強します(゜)(。。)ペコッ。

(入力でEndを使い,クリアで For i = 2 To 6とセル を指定しているのが,どうし
てかなと思いますが。)

元記事は、セルを個別に指定してクリアしていました

Cells(コピー行, 2).ClearContents
Cells(コピー行, 4).ClearContents
Cells(コピー行, 5).ClearContents

で全部をクリアするのについFor i = 2 To 6を

(..;)""""> ポリポリ

ありがとうございます。
50歳過ぎのおいちゃんは、雑誌の記事を参考に、自分のやりたいことを
ただ単に足すだけでして(^_^;)

沙門

koun...@mbh.nifty.com

未読、
2003/06/24 1:59:482003/06/24
To:
鴻池です。

"沙門" <go...@ca2.so-net.ne.jp> wrote in message

news:bd6dij$t41$1...@news01bf.so-net.ne.jp...
> 沙門です


> (入力でEndを使い,クリアで For i = 2 To 6とセル を指定しているのが,どう

> てかなと思いますが。)
>
> 元記事は、セルを個別に指定してクリアしていました
>
> Cells(コピー行, 2).ClearContents
> Cells(コピー行, 4).ClearContents
> Cells(コピー行, 5).ClearContents
>
> で全部をクリアするのについFor i = 2 To 6を

これは,Forを使うのは自然だと思います。言いたかったことは,Forの使い方でなく
範囲が固定されているなら,コピーでは,

Range(Cells(2, 2), Cells(2, 6)).Select
Selection.Copy
でいいと思うし,クリアーなら
Range(Cells(2, 2), Cells(2, 6)).ClearContents
で用は足りると思ったからです。

> 50歳過ぎのおいちゃんは、雑誌の記事を参考に、自分のやりたいことを
> ただ単に足すだけでして(^_^;)

私も,それに毛が生えた程度です。

Y.Sone

未読、
2003/06/24 11:10:502003/06/24
To:
曽根です。

koun...@mbh.nifty.com wrote:
>
> Range(Cells(2, 2), Cells(2, 6)).Select
> Selection.Copy
> でいいと思うし,クリアーなら
> Range(Cells(2, 2), Cells(2, 6)).ClearContents
> で用は足りると思ったからです。

想像するに、元のサンプルマクロは、入力セルを別のところのもって行きたい
時には、最初の 1行

> Range("B2").select

だけ書き換えれば良いような構造になっていたんじゃないですかね。
絶対番地と相対番地は混在させない方が何かと痛い目にあうのを防ぐには良い
と思います。が、それにしても

> Range(Selection, Selection.End(xlToRight)).Copy

は、すべてのデータが存在する(途中に空欄が無い)ことを前提にしていると
いう意味で私もやや不用意な印象を受けます。


--
曽根庸介

沙門

未読、
2003/06/25 17:49:562003/06/25
To:
沙門です

色々と勉強になり感謝いたします。


> Range(Cells(2, 2), Cells(2, 6)).Select
> Selection.Copy

で、指定範囲のデータがコピーされますが

入力用のセルに、リストを「入力規制」を利用して設定していた場合
このリストごとと言うか入力規制のリスト選択仕様もペーストされてしまいます

リストで選択した純粋にデータだけコピー&ペーストするにはどうするのでしょうか

VBEのヘルプを探しましたがみつかりません=いまいちヘルプの使い方が
正しくないのか、ヒットしない率が高すぎます(m_m)

よろしくお願いします

沙門

Eiichi K

未読、
2003/06/26 5:00:432003/06/26
To:
興味があったので、お邪魔します。

> 入力用のセルに、リストを「入力規制」を利用して設定していた場合
> このリストごとと言うか入力規制のリスト選択仕様もペーストされてしまいます
>
> リストで選択した純粋にデータだけコピー&ペーストするにはどうするのでしょう

VBAでなくとも通常の操作でも同じですが、貼付時に形式を指定して貼付。
>値 でOKかと思います。

マクロの自動記録で安直に書き出しますと、

Range("貼付セル番地").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=
_
False, Transpose:=False

となりました。

eiichi k

沙門

未読、
2003/06/26 7:20:492003/06/26
To:
沙門です

"Eiichi K" <kog...@mx1.tiki.ne.jp> wrote in message
news:bdeco3$jkd$1...@nntp.tiki.ne.jp...

> マクロの自動記録で安直に書き出しますと、
>
> Range("貼付セル番地").Select
> Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:=
> _
> False, Transpose:=False
>
> となりました。

このコードを書き換えたところ、目的のほほ95%は達成できました
感謝(m_m)

残り5%はと言いますと、値はペーストできたけど、罫線はできないのですね。

形式を指定して貼り付けるのには「たった一つの選択枠しかない」のですね
ラジオボタンが複数選択できればよいのに☆(゜o゜(C=(-_-#!!

なにはともあれ感謝致します

沙門

Naoaki Sato

未読、
2003/06/25 19:37:502003/06/25
To:
>純粋にデータだけコピー&ペーストするにはどうするのでしょうか

データだけでしたらこれでどうでしょうか?

>Sub 入力()
>
>range("B2").select
>
>Dim コピー行, レコード数, ペースト行 As Integer
>コピー行 = Selection.Row
>レコード数 = ActiveCell.Offset(2, 0).CurrentRegion.Rows.Count
>ペースト行 = ActiveCell.Offset(2, 0).Row + レコード数
>
>Range(Selection, Selection.End(xlToRight)).Copy
>Cells(ペースト行, 2).Select

'ActiveSheet.Paste


Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

>Application.CutCopyMode = False


>
>If Not IsNumeric(Cells(ペースト行 - 1, 1)) Then
> Cells(ペースト行, 1) = 1
>Else
> Cells(ペースト行, 1).Value = Cells(ペースト行 - 1, 1) + 1
>End If
>

> For i = 2 To 6
> Cells(コピー行, i).ClearContents
> Next i
>
>range("B2").select
>
>End Sub


--
Naoaki Sato
mailto:sato-...@asahikeiki.co.jp

Y.Sone

未読、
2003/06/26 12:23:072003/06/26
To:

沙門 wrote:
>
> 残り5%はと言いますと、値はペーストできたけど、罫線はできないのですね。

まず値をペーストしておいて、引き続き書式をペーストする、なんてやり方は
私はよくやります。

この場合、
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
(または Selection.PasteSpecial Paste:=xlPasteValues)
Selection.PasteSpecial Paste:=xlPasteFormats

と 2行続けて書いておく、てな感じですかね。


--
曽根庸介

Eiichi K

未読、
2003/06/28 1:13:352003/06/28
To:
> このコードを書き換えたところ、目的のほほ95%は達成できました
> 感謝(m_m)
>
> 残り5%はと言いますと、値はペーストできたけど、罫線はできないのですね。
>
> 形式を指定して貼り付けるのには「たった一つの選択枠しかない」のですね
> ラジオボタンが複数選択できればよいのに☆(゜o゜(C=(-_-#!!
>

ども。
お役にたてられて光栄です。
しかし後半の疑問はあまりにも反射的な質問ですね。
罫線は出来ないというより、じゃすればいいではないですか?としか応えられません
が、
一度にやりたいということなんでしょうか?
既にsoneさんのフォローが付いておりますが、私も書式のペーストしか思いつきませ
ん。
eiichi k


沙門

未読、
2003/06/28 20:27:562003/06/28
To:
沙門です

"Eiichi K" <kog...@mx1.tiki.ne.jp> wrote in message

news:bdj868$5ua$1...@nntp.tiki.ne.jp...
お世話になります


> しかし後半の疑問はあまりにも反射的な質問ですね。
> 罫線は出来ないというより、じゃすればいいではないですか?としか応えられませ

> が、

短絡的な性格でして、すみません。
ひとつひとつ形式を指定してペーストしていけば良いことに
きがつかなかっただけ☆(゜o゜(C=(-_-#!!

自動マクロの記述...というのをもっと活用すれば、やりたいことの
ヒントが山とあると言うことに気が付かされた今回です
m(。-_-。)mス・スイマセーン

ありがとうございました。
沙門

新着メール 0 件