エクセル初心者です。

エクセルのシート1に
A列の1行目~10行目にA~Jまでの文字が入力されています。

これをシート2の
B列の1~100行目に
シート1からランダムで抽出した3つ又は4つの文字を
ACE
DFG
・・・・

のように埋めるには、どのような式を入れればできるのでしょうか?
文字はだぶらないように抽出したいと思います。
文字はCAEのように、順番が逆になっても構いません。
むしろ時々逆になったりするほうが都合がよいです。
抽出される文字数も、3つだけでなく、ランダムで4つ抽出するときも
あるようにしたいです。

オフィス2003を使用しています。

ご回答よろしくお願いします。

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

A 回答 (7件)

No1 merlionXXです。


質問文を読み直しましたが、ひょっとして

> 文字はだぶらないように抽出したいと思います。

とは、リストアップされる文字列100個が重複しないだけでなく、個々の文字列内でも同じ文字は使用しないという意味だったのでしょうか?
もしそうなら先ほどのではダメです。

以下のようにしてみてください。

Sub test02()
Dim myRng As Range '変数宣言
Dim myDic As Object
Dim x As Integer, myStr As String, v As String

Randomize '乱数初期化

Set myRng = Sheets("Sheet1").Range("A1:A10") 'データ範囲
Set myDic = CreateObject("Scripting.Dictionary") 'オブジェクト準備

Do Until myDic.Count = 100 'ユニークで100そろうまで
x = Int(2 * Rnd) + 3 '乱数で桁数設定(3~4)
myStr = ""

Do Until Len(myStr) = x
v = myRng(Int(10 * Rnd) + 1) '乱数で文字設定
If InStr(myStr, v) = 0 Then '文字列内で重複しなければ
myStr = myStr & v '文字列につなげる
End If
Loop

If Not myDic.exists(myStr) Then '単語が重複しなければ
myDic.Add myStr, x '収録
End If
Loop '繰り返し

Sheets("Sheet2").Range("B1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys) '転記
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

No.1で補足させていただいた通り、
先の式で同一セル内で重複さえされなければ完璧でした。

実際にはA列の行数も抽出する数も、B列に吐き出す行数も質問とは違うのですが、
ご指定いただいた式?だと私でも改変できそうです。

ただ、今回ご指定の式?で
No.1の手順で同様の作業をしてみたのですが、
test02()の選択をしても、何も挿入されないようです。

何か問題があったのでしょうか?

お礼日時:2009/05/28 01:34

#3です。


参考までに、お聞きしたい。
お礼で、>ご指定の方法ではうまくできませんでした。
とありますが、結果について、どういう点で、質問の主旨に合わないですか。
(RAND関数で乱数利用ですから、私が回答に上げた例(結果)とは表面的(値・文字では)には、全く違う結果になるのはご存知ですよね。それは別にして、他に質問の主旨に合わない点は)

この回答への補足

せっかくご回答いただいたのですが、
私がすると
#NAME?
という表示がでてしまうのです。

私は関数に関してはほぼ知識ゼロなので、
私の理解力が足らないのが原因と思います。

ご面倒おかけしました。

補足日時:2009/05/28 10:08
    • good
    • 0

No5 merlionXXです。



> 何も挿入されないようです。

挿入されないとはSheet2のB1以降に何も表示されないということですか?何かエラーメッセージはでませんでしたか?
今、エクセルのあたらしいBOOKを立ち上げ、No5で回答したコードをそのままコピーしてやってみましたが正常に作動しました。
原因がわかりません。
実際にはA列の行数も抽出する数も、B列に吐き出す行数も質問とは違うとのことなので、もし、nori213さんのBOOKの実情にあわせてコードを改造したのなら、実際の状態を教えてください。
こちらでも修正してみますので。
    • good
    • 0
この回答へのお礼

何度もご回答ありがとうございます。

私にミスがあったようで、
もう一度やったら
ちゃんと表示されました。

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

お礼日時:2009/05/28 10:24

その、やたら面倒そうな関数で挑戦してみました。

確かにかなり面倒です。

1.C1:L100(合計1000個のセル)に =RAND() を入力する。

2.M1に =RANK(C1,$C1:$L1) と入力、M1:V100にコピーする。

3.W1に =IF(M1>7,M1,"") と入力、W1:AF100にコピーする。

4.B1に =CONCATENATE(W1,X1,Y1,Z1,AA1,AB1,AC1,AD1,AE1,AF1) と入力、B1:B100にコピーする。

4文字作るなら、3.のところで =IF(M1>6,M1,"") とすればオッケーです。

要は、「重ならない3つを取り出す」という行為に「全部の対象文字に
乱数を発生させ、上から順に取り出す」という面倒な手順を踏んでいる
わけで(多分処理も目一杯遅そう)、素直にVBAを使ったほうが、私も
「速くて簡単」だと思います。

・・・ま、やれば出来る、という話です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

質問に「式」と書いてしまったのは
私にマクロを使用するという概念が全くなかったからで、
マクロでも式でも、
できるだけ簡単なやり方が良いです。

私の質問がまずかったようです。

お礼日時:2009/05/28 01:29

今までになかった珍奇な質問で>エクセル初心者には難しいように思う。


>ランダムで4つ抽出するときもあるようにしたいです
3文字と4文字を(1つの結果シートに)混ぜるのは難しいともう
(1)3文字バージョン
(2)4文字バージョン
に分けてとりあえず3文字バージョンを考える。
その後3を規定しているところろを4にする、で我慢すること。
ーーー
>文字はだぶらないように抽出したいと思います。
本件はランダム関連のRAND、RANDBETWEENのようなものを使うことになると思うが、乱数はそもそも重複出現は排除されない。
同じものが現れれば捨てるとして、関数で表現すると、非常に式が長くなって、手に負えない。
ーーー
最終形はアルファベットの文字の3文字(か4文字)でしょうが、扱うのは、とりあえずは数にならざるを得ないと思う。たまたま本質問はA-Jの10文字なので、0-9に置き換えて、0-9の乱数を3つ(3桁用)発生させて123、311、461・・のようにすると思うが
それをBCD・・などに変換する関数は長くなる(CHoose関数でも使う?)。
===
結果として、私はVBAで無いと面倒と思う。質問者はVBAは警官無いだろうから、そちらは無理。
ーー
1セル内の3桁文字にするのは後にして
3列を考え、それぞれの列で0-9の数字を発生させる。
その段階で(各列ごとに)Choose関数でアルファベット化する。別の3列で文字化も出来る。
最後に3列を「&」結合演算子で、1つの文字列にする。
順序も含め(=ABDとADBは違うものとする)同じセルがあれば(COUNTIF関数など利用か?)、手作業で削除する。行の削除はimogasi方式などで出来るが複雑。
ーーー
A1セルに
=CHOOSE(randbetween(0,9)+1,"A","B","C","D","E","F","G","H","I","J")
と入れてC1セルまで式複写・
A1:C1の式を、A5:C5まで式複写。
EDA
HIB
FIJ
JJI
JIA
1つの文字列化は
D1に=A1&B1&C1
ーーー
しかしRAND関数の特徴として、再計算されるたびに、毎回セルの値=結果が変わる。
だから早いうちに、セルの式を消してしまう(形式を選択して貼り付けー値)方が良い(考えやすい)と思う。
ーー
私は乱数理論に詳しく無いので、乱数に関連して、上記のやり方が、理論的な面で、欠陥が指摘されるかもしれないと思っている。
ーー
理論的な面も含め、総体的にみて、(質問者には、回答の式をコピーすれば結果が出て、ありがとう、と言うことだが、本来背後に持っているべき関連知識などがあり)、初心者には無理な質問であろうと思う。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘の通り、「そもそもVBAとは何?」ということをググることから始めてます。

私のやり方が間違っていると思うのですが、
ご指定の方法ではうまくできませんでした。

お礼日時:2009/05/28 01:19

>抽出される文字数も、3つだけでなく、ランダムで4つ抽出するときもあるようにしたいです


に対応します。→ A11 はブランクにしておいてください。

※結果は3桁よりも4桁の方が多くなります。

作業列に C~Qを使用します。
まず、G1~Q1に =RAND() を入力し、11個の乱数を発生させます。
次にC1に
=RANK(G1,$G1:$Q1)を入力し,D1~F1にCopy&Paste
続いてB1に
=INDEX($A$1:$A$11,C1)&INDEX($A$1:$A$11,D1)&INDEX($A$1:$A$11,E1)&INDEX($A$1:$A$11,F1)

B1~Q1を100行目まで Copy&Pasteして完成です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ご指定の通りにしたら、良い形のものができました。

ただ、実際には
A列に100行くらい、B列に3000行くらいのものを作りたかったので
少し大変そうです。

お礼日時:2009/05/28 01:07

関数ではやたらめんどうそうなのでVBAでやってみました。


とても簡単ですので以下の手順をおためしください。

1.AltキーとF11キー同時に押し(以下Alt+F11キーと記述)て Visual Basic Editor を呼び出します。

2.Visual Basic Editor のメニューから「挿入」、「標準モジュール」で出てきたコードウィンド(右側の白い広い部分)に以下のコード(Sub~End Sub)をコピー&ペーストします。

'********これより下**********

Sub test01()
Dim myRng As Range '変数宣言
Dim myDic As Object
Dim x As Integer
Dim myStr As String

Randomize '乱数初期化

Set myRng = Sheets("Sheet1").Range("A1:A10") 'データ範囲
Set myDic = CreateObject("Scripting.Dictionary") 'オブジェクト準備

Do Until myDic.Count = 100 'ユニークで100そろうまで
x = Int(2 * Rnd) + 3 '乱数で桁数設定(3~4)
myStr = ""
For i = 1 To x
myStr = myStr & myRng(Int(10 * Rnd) + 1) '乱数で文字順設定
Next i
If Not myDic.exists(myStr) Then '重複しなければ
myDic.Add myStr, x '収録
End If
Loop '繰り返し

Sheets("Sheet2").Range("B1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys) '転記
End Sub

'********これより上**********

3.Alt+F11キーでワークシートへもどります.

4.Alt+F8キーで出てきたマクロ名(test01)を選択して実行します。

この回答への補足

何がどうなっているのか、私にはさっぱりわからないのですが(;^_^A
ご指定の通りにしたら、それらしきものができました。

これで同一セル内に
同じ文字が重複しなければ問題なかったんですが・・・

補足日時:2009/05/28 00:57
    • good
    • 0

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

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

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

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

Q数字をランダムに表示してくれる機械がほしいです。

タイトルにもありますが、ビンゴゲームで使う機械のような、好きな範囲で、好きな個数の

数字をランダムに表示してくれる機械などありますでしょうか?

上記の機能だけならエクセルの関数を使って簡単に再現できるのですが、

なるべくパソコンを使わない、コンパクトで電気をあまり使わない形で使いたいのです。

また、商品として売られていないのであれば、そういった機械をオーダーメイドで作ってくれる

お店などありませんでしょうか?

以上、どなたかご教示頂きますよう、お願い致します。

Aベストアンサー

非安定マルチバイブレータかCMOSインバーターでクロックを得て、それを不定期に断続してカウンターで計測すれば目的は達せられます、

ヤフー知恵袋の工学のカテゴリーで、CMOSロジックicで乱数を発生させるや、電子サイコロや7セグメントLEDで表示させるスロットマシンの作り方等で質問をしてみたら如何でしょうか?

ただし、回答がもらえるまでくだらない事で荒れるのがヤフーですのでエラソーに回答をするバカや基地外は適当にあしらって下さい、

とりあえずは解決へのヒントまで…

QエクセルのワークシートAの1列目(A列)の日付と、ワークシートBの1列

エクセルのワークシートAの1列目(A列)の日付と、ワークシートBの1列目(A列)の日付を一致させて1つのワークシートに纏める方法を探しています。

2つの時系列データがあるのですが、データA(為替データ)とデータB(株式データ)のデータ管理方法が下記のように異なっています。

データA(為替データ)・・・1週間のうち6日間(月曜から土曜まで)
データB(株式データ)・・・1週間のうち5日間(月曜から金曜まで)

おのおのワークシートのA列に日付が入っています。

データAは月曜から土曜までなので、1週間に6行要します。データBは月曜から金曜なので1週間に要するのは5行です。従って、単純にこの2つのデータを張り合わせるだけでは(データBをデータAのシートに張り合わせた時)、1週間に要する行数が違うので1行ずつずれてしまいます。

1週間に要する行数の違いだけでなく、マーケットが休みの日はデータそのものがないため日付が存在しません。(マーケットの休みもおのおの別の日でバラバラです。)

これらの理由により、ただ単に張り合わせるだけだとずれが広がるばかりです。

そこでデータAの日付とデータBの日付を認識して一致させる関数を教えて欲しいと思います。

データAの構成はA1=日付、B1=始値、C1=高値、D1=安値、E1=終値で、データBの構成も同じです。
データAのF1にデータAのA1と同じ日付のデータBの行を貼り付るように設定したいと思っています。

説明が分かり辛い場合は補足しますので、その際はご指摘下さい。

宜しくお願いします。

エクセルのワークシートAの1列目(A列)の日付と、ワークシートBの1列目(A列)の日付を一致させて1つのワークシートに纏める方法を探しています。

2つの時系列データがあるのですが、データA(為替データ)とデータB(株式データ)のデータ管理方法が下記のように異なっています。

データA(為替データ)・・・1週間のうち6日間(月曜から土曜まで)
データB(株式データ)・・・1週間のうち5日間(月曜から金曜まで)

おのおのワークシートのA列に日付が入っています。

データAは月曜から土曜までなので、1...続きを読む

Aベストアンサー

誤記がありましたね。ごめんなさい。

シートCのA2に
2010/1/1
を置いて下向けにえいやっとオートフィルドラッグ,365日の日付を並べておいて
B2:為替
=IF(COUNTIF(為替!$A:$A,$A2),VLOOKUP($A2,為替!$A:$E,COLUMN(B2)),"")
を右に下にコピー。
F2:株式
=IF(COUNTIF(株式!$A:$A,$A2),VLOOKUP($A2,株式!$A:$E,COLUMN(B2)),"")
を右に下にコピー。

これでマーケットの開いてなかった日付がエラーになることもありませんので,追加のご質問も解消でしょうか。

QjQueryを使ってランダムに表示

jQueryを使って5つのボックス要素を、ランダムに3つ表示させています。
現在はページを読み込むたびに表示を切り替えていますが、これを「一定時間で表示を切り替え」に変更する事は可能でしょうか?
できればjsのみの修正でできれば良いのですが…。
どなたかお助けください。よろしくお願いいたします。
jsとhtmlは以下のようにしています。

jQuery(function($) {

$.fn.extend({
randomdisplay : function(num) {
return this.each(function() {
var chn = $(this).children().hide().length;
for(var i = 0; i < num && i < chn; i++) {
var r = parseInt(Math.random() * (chn - i)) + i;
$(this).children().eq(r).show().prependTo($(this));
}
});
}
});

$(function(){
$("[randomdisplay]").each(function() {
$(this).randomdisplay($(this).attr("randomdisplay"));
});
});

});


<div randomdisplay="3">
<div id="box">ランダム1</div>
<div id="box">ランダム2</div>
<div id="box">ランダム3</div>
<div id="box">ランダム4</div>
<div id="box">ランダム5</div>
</div>

jQueryを使って5つのボックス要素を、ランダムに3つ表示させています。
現在はページを読み込むたびに表示を切り替えていますが、これを「一定時間で表示を切り替え」に変更する事は可能でしょうか?
できればjsのみの修正でできれば良いのですが…。
どなたかお助けください。よろしくお願いいたします。
jsとhtmlは以下のようにしています。

jQuery(function($) {

$.fn.extend({
randomdisplay : function(num) {
return this.each(function() {
var chn = $(this).children().hide().length;
for(var i = 0; i...続きを読む

Aベストアンサー

ランダム表示する関数を呼び出している部分を関数にして、setIntervalで繰り返して呼んであげればいいんでないでしょうか。

https://developer.mozilla.org/ja/docs/Web/API/window.setInterval

QA列とB列の重複を抽出したいのですがA列とB列の値は一部だけ同じ文字です。ご教示お願いします。

エクセル初心者です。重複を見つけるのが仕事です。いろいろやってみたのですがうまくできません。
お知恵をお貸しください。

A列には企業名が入力されています。
B列にも企業名が入力されていますが全く同じ文字ではないのです。

たとえばこういうことです。
A1 (有)雪見酒      B1  雪見
A2 株式会社豪雪地帯   B2 (株)豪雪地帯
A3 ゆきかき本舗     B3 (有)ゆきかき本舗

A列にある企業名とB列にある企業名が同じであればセルを塗りつぶすか○を表示させるように
したいのです。
重複を見つけるのが目的なので、ほかの方法でもかまいません。
すみません、A列のセルとB列のセルが全く同じ名前ならば重複が見つけられたのですが
ここから先がどうしてもわからないのです。。。
申し訳ありませんがどうか教えてください。。。

Aベストアンサー

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim nameT1(maxrow1)
ReDim nameT2(maxrow2)
Range("C1:" & "D" & maxrow2).Value = ""
Call makeTable(nameT1, "A", maxrow1)
Call makeTable(nameT2, "B", maxrow2)
For row1 = 1 To maxrow1
For row2 = 1 To maxrow2
If Cells(row2, "C") = "" Then
If Mymatch(nameT1(row1), nameT2(row2)) = True Then
Cells(row2, "C").Value = "○"
Cells(row2, "D").Value = row1
End If
End If
Next
Next
t2 = Time
MsgBox ("チェック完了 処理時間=" & Minute(t2 - t1) & "分" & Second(t2 - t1) & "秒")
End Sub
'余分な文字を削除した結果をテーブルに格納する
Private Sub makeTable(ByRef nameT() As String, ByVal col As String, ByVal maxrow As Long)
Dim row As Long
Dim ary As Variant
Dim name As String
Dim i As Long
ary = Array("㈱", "(株)", "株式", "(有)", "有限", "会社")
For row = 1 To maxrow
name = Cells(row, col).Value
For i = 0 To UBound(ary)
name = Replace(name, ary(i), "")
Next
nameT(row) = name
Next
End Sub
'企業名が一致かどうか判定する
Private Function Mymatch(ByVal name1 As String, ByVal name2 As String) As Boolean
Mymatch = False
Dim pos As Variant
pos = InStr(1, name1, name2, vbTextCompare)
If pos > 0 Then Mymatch = True
End Function
-----------------------------------------------------
一致の精度が悪ければその旨補足してください。
(一致すべきものが一致しない、一致してはいけないものが一致している)
100%解決できる保証はありませんが、多少のチューニングは行います。

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim ...続きを読む

Q配列変数に重複のないランダムな数字を入れて行くには?

JavaScript初心者です。
配列にランダムな数字を入れたいのですが、

aRnd = new Array();
aRnd[0] = Math.floor(Math.random()*100);
aRnd[1] = Math.floor(Math.random()*100);
aRnd[2] = Math.floor(Math.random()*100);

のようにやると各配列にはランダムな数字が入りますが、重複が発生する可能性があります。これを重複が発生しないようにしたいのですが、どのようにすればいいのでしょうか?
なお、上記例では0~99までの数字を3つの配列にセットする方法となっていますが、配列数や数字の最大値は変更する可能性があるので、これも配慮したいと思います。
よろしくお願いいたします。

Aベストアンサー

アルゴリズム的なアドバイスしかできませんが、参考になればと思います。

値をaRnd[n]に入れた後に、aRnd[0]~aRnd[n-1]とanRnd[n]を比較していきます(IFとかforを使う)。
同じ値が見つかった場合、nを-1してもう一度実行しなおせばいけます。

Q「2017」シートのC列と「全国」シートのB列を「ある」「なし」で照合させたいのですが、下のような

「2017」シートのC列と「全国」シートのB列を「ある」「なし」で照合させたいのですが、下のような COUNTIF の式を作りましたがうまくいきません。

=IF(COUNTIF(全国!B63:B5581,'2017'!C2006:C3205,"あり","なし")

全国を'全国’としたほうがいいですか?
終わりのカッコはどのようにすればいいですか?どこが間違ってるのでしょうか。よろしくお願いします。

Aベストアンサー

とりあえず、IFの中にCOUNTIFが入っているはずなのに"("は2個")"は1個でおかしい、
IFは条件式が正しければA、正しくなければB、とする感じの式ですが、条件式が見当たらない。
(COUNTIFだけでは数を数えているだけであり、その数がどうであればどうするのかを書かなければならない)
そして、COUNTIFで数えるデータがきちんと選択されていない。

順番に説明しましょう。
=IF(COUNTIF(~)=0,"なし","あり")
これで、COUNTIFの計算結果が0であった場合は"なし"、そうでなければ"あり"を表示する。という式になります。
一致するものが1回しか出ないと確実に分かっている(入力ミス等もない)ならば、
=IF(COUNTIF(~)=1,"あり","なし")
としても良いですが、まぁCOUNTIFの結果が2以上であった場合にどうするかで使い分けてください。

=COUNTIF(A1:B2,C3)
これで、A1~B2の範囲にC3と同じデータがいくつあるかを計算します。
今回の場合であれば、
=COUNTIF(全国!B$63:B$5581,2017!C2006)
をC3205に対応する行までコピーする感じでしょうか。

両方組み合わせて
=IF(COUNTIF(全国!B$63:B$5581,2017!C2006)=0,"なし","あり")
を1199行下までコピーですかね。

とりあえず、IFの中にCOUNTIFが入っているはずなのに"("は2個")"は1個でおかしい、
IFは条件式が正しければA、正しくなければB、とする感じの式ですが、条件式が見当たらない。
(COUNTIFだけでは数を数えているだけであり、その数がどうであればどうするのかを書かなければならない)
そして、COUNTIFで数えるデータがきちんと選択されていない。

順番に説明しましょう。
=IF(COUNTIF(~)=0,"なし","あり")
これで、COUNTIFの計算結果が0であった場合は"なし"、そうでなければ"あり"を表示する。という式になりま...続きを読む

Qランダム表示文字について

if ( open( IN,"hoge.txt" ) ) {
  @line = <IN>;
  close( IN );
} else {
  exit;
}

$random1 = @line[rand(@line)];
$random2 = @line[rand(@line)];
$randam3 = @line[rand(@line)];

テキストファイルから1行文字をランダムに表示するプログラムを書き実行できたのですが、このままだとrandom1,2,3の変数に同じものが入ってしまう可能性があります。
これで全て違うものが入るようなプログラムを書きたいのですが、そのようなことは可能でしょうか?

Aベストアンサー

if ( open( IN,"hoge.txt" ) ) {
  @line = <IN>;
  close( IN );
} else {
  exit;
}


splice()関数というのが使って実現してみました。
splice(@line, 5, 1) とすれば、@line,の5番目の1個分の要素を削除することを意味します。そしてこの関数は取り除かれた部分のリストを返します。
こちらで、勝手ながら$randam1等を$randam[1]と配列にしてしまえば、

for($i=1; $i<=3; $i++){

my $n = rand(@line);#乱数

$random[$i] = splice(@line,$n,1);

}

forループ使わないで、runner_h_aさんのソースの通りランダムに取得する行が3つくらいで少ない場合は、

$random1 = splice(@line,rand(@line),1);
$random2 = splice(@line,rand(@line),1);
$randam3 = splice(@line,rand(@line),1);

でいけると思いますが、動作確認はしてません。

if ( open( IN,"hoge.txt" ) ) {
  @line = <IN>;
  close( IN );
} else {
  exit;
}


splice()関数というのが使って実現してみました。
splice(@line, 5, 1) とすれば、@line,の5番目の1個分の要素を削除することを意味します。そしてこの関数は取り除かれた部分のリストを返します。
こちらで、勝手ながら$randam1等を$randam[1]と配列にしてしまえば、

for($i=1; $i<=3; $i++){

my $n = rand(@line);#乱数

$random[$i] = splice(@line,$n,1);

}

forループ使わないで、runne...続きを読む

Qシート1のA列にある会社名を探してB列にある住所が入力されたら、シート2のB列に○を付けたい

シート1
A列        B列
株式会社A     東京都町田市…
株式会社B     
株式会社C     北海道札幌市…
↓↓↓↓↓
シート2
A列        B列
株式会社C     ○
株式会社A     ○
株式会社B

上記のように表示したいです。
できれば、関数でできれば助かります。

追加:シート2の会社名はシート1の会社名と順番が違います。

よろしくお願いします。

Aベストアンサー

こんばんは!

↓の画像でSheet2のB2セルに
=IFERROR(IF(VLOOKUP(A2,Sheet1!A:B,2,0)<>"","○",""),"")
という数式を入れフィルハンドルで下へコピーしています。m(_ _)m

Q小文字、大文字、記号をランダム表示

このプログラムは英大文字をランダムに表示するプログラムなのですが、これを小文字と記号も合わさった形で出力されるように改造するにはどうしたらいいでしょうか。コードを添えて下さると助かります。

import java.util.Random;

public class Aruf{
public static void main(String[] args) {

//Randomクラスのインスタンス化
Random rnd = new Random();

//変数の宣言
int ran;
int a;
char c;

//10回繰り返す
for(int b=0;b<10;b++){
//0~25の乱数を作成
ran = rnd.nextInt(26);

//65を足して65~90にする
a = 65 + ran;

//charに型変換
c = (char)a;
//表示
System.out.print(c);
}
}
}

このプログラムは英大文字をランダムに表示するプログラムなのですが、これを小文字と記号も合わさった形で出力されるように改造するにはどうしたらいいでしょうか。コードを添えて下さると助かります。

import java.util.Random;

public class Aruf{
public static void main(String[] args) {

//Randomクラスのインスタンス化
Random rnd = new Random();

//変数の宣言
int ran;
int a;
char c;

//10回繰り返す
for(int b=0;b<10;b++)...続きを読む

Aベストアンサー

//0~51の乱数を作成
ran = rnd.nextInt(52);

if(ran <= 25){
 //65を足して65~90にする 大文字
 a = 65 + ran;
}
else{
 //71を足して97~122にする 小文字
 a = 97 - 26 + ran;
}

Q下記のようにA列にランダムで出現する数字に対して、B列でその出現間隔を

下記のようにA列にランダムで出現する数字に対して、B列でその出現間隔を計算する関数ってありますでしょうか?A列の数字が何千行となるため、単純な減算?等ではなく関数でやりたいのですが・・・。

(例)
A列 B列
 0
 0
 3
 0
 0
 0
 7  4
 0
 0
10  3
 0
 0

 色々検討しているのですが、うまく行かずに悩んでいます。誰か教えて頂けないでしょうか?。

Aベストアンサー

質問の意図が良く判りませんが、要するに、A列に0以外の数値がある時、その直前(上方向)の数値がある行から何行離れているかを表示できれば良いのででしょうか?
#7行目の前は3行目に0以外の数値があるので、4と表示

それでしたら、B2に↓の式を入れ、下方向にコピーしてください。B1ではなく、B2です。
=IF(A2=0,"",IF(SUMPRODUCT(MAX(ROW(A$1:A1)*(A$1:A1<>0)))=0,"",ROW()-SUMPRODUCT(MAX(ROW(A$1:A1)*(A$1:A1<>0)))))


人気Q&Aランキング